Sqlalchemy:打印表格内容

问题描述 投票:0回答:4

我想使用 sqalchemy 打印表的所有内容。我似乎无法弄清楚检查是如何工作的。

我想实现这样的目标:

column1: value1, column2: value4
column1: value2, column2: value5
column1: value3, column2: value6

在如下所示的表格中:

Table_1:
+---------+---------+
| column1 | column2 |
+---------+---------+
| value1  | value4  |
| value2  | value5  |
| value3  | value6  |
+---------+---------+
python sqlite sqlalchemy
4个回答
3
投票

虽然我不知道如何使用

inspect
做到这一点,但我通过常规查询实现了所需的输出。对于此示例,我根据您的示例创建了一个
sqlite
表。首先,我们连接并反映这个现有数据库。

from sqlalchemy.ext.automap import automap_base
from sqlalchemy.orm import sessionmaker
from sqlalchemy import select
eng = create_engine("sqlite:///databases/example_table.db")

Base = automap_base()
Base.prepare(eng, reflect=True)
Table = Base.classes.example_table

为了方便我们的查询,我们实例化一个

session
,

Session = sessionmaker(bind=eng)
session = Session()

并执行查询,将结果保存到

result

stmt = select('*').select_from(Table)
result = session.execute(stmt).fetchall()

此查询的元素是

sqlalchemy
RowProxy
类的实例,该类具有可用于访问列名称的
keys
方法。因此,我们可以用一些简短的函数来转换
result

def result_dict(r):
    return dict(zip(r.keys(), r))

def result_dicts(rs): 
    return list(map(result_dict, rs))

result_dicts(result)

返回

[{'id': 1, 'column1': 'value1', 'column2': 'value4'},
 {'id': 2, 'column1': 'value2', 'column2': 'value5'},
 {'id': 3, 'column1': 'value3', 'column2': 'value6'}]

2
投票

我不知道这有多有用,但是您可以在绝望的时候可视化桌子,或者您需要快速浏览一下桌子。

# create an engine using the following code and 
# replace it with the path to your .db file.

from sqlalchemy import create_engine
engine = create_engine('sqlite:///employee.db', echo = False)

# Import pandas and connect the engine
# use the lowercase representation of your table name for table_name parameter 
# For ex:
class Users(db.Model):
    ...
    ...
    ...

import pandas as pd

user_table = pd.read_sql_table(table_name="users", con=engine)
# This will load the table as dataframe and then you can display

我知道,如果数据库很大,使用 pandas 对其进行可视化可能不是最好的主意,但正如我上面所说,绝望的时刻!


1
投票

也许你看看这里:

http://docs.sqlalchemy.org/en/rel_1_0/core/reflection.html

检查器对象可以帮助您解决问题。


0
投票

如果您使用数据库模型,请尝试

entries = DBModel.query.all()
for entry in entries:
    print(entry)
© www.soinside.com 2019 - 2024. All rights reserved.