Sqlalchemy:打印表格的内容

6
我希望使用sqalchemy打印表格的所有内容。但是我似乎无法理解inspect的工作原理。
我想要实现类似以下的功能:
column1: value1, column2: value4
column1: value2, column2: value5
column1: value3, column2: value6

在一个长这样的表格中:
Table_1:
+---------+---------+
| column1 | column2 |
+---------+---------+
| value1  | value4  |
| value2  | value5  |
| value3  | value6  |
+---------+---------+
3个回答

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()

这个查询的元素是 sqlalchemyRowProxy 类的实例,它有一个 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

我已经做过了,但似乎无法弄清楚检查器对象的工作原理。 - ThP
让我再看一遍。 - adriansdq
请问您能否在答案中添加细节?@adriansdq - Mr. Unnormalized Posterior

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接