python - 使用 SQLAlchemy 元数据 reflect() 如何获得实际的表对象?

标签 python sqlalchemy

我只是在现有数据库上进行一系列选择。

  • 不想使用原始 SQL,因为我可能想在 MySQL 和 SQLite 之间跳转以进行测试
  • 想要坚持使用 SQLAlchemy 的 SQL 表达式语言。

我需要获取一个 Table 对象,所以我会执行如下操作:

 s = select([some_table_object])

我已经想通了如何显式反射(reflect)单个表来获取表对象:

from sqlalchemy import *

conn = create_engine('mysql://....')
metadata = MetaData(conn)
mytable = Table('mytable', metadata, autoload=True)

s = select([mytable])
result = conn.execute(s)

# HAPPY!!!!

但是,这会变得乏味,因为您必须为每张 table 都这样做(我去了很多 table )。我知道我可以以某种方式使用 MetaData 类来反射(reflect)我正在连接的现有数据库,但我不确定如何从元数据中获取实际对应的表。

from sqlalchemy import *

conn = create_engine('mysql://....')

metadata = MetaData(conn)
metadata.reflect()

# How would do I get a Table instance corresponding to the 
# mytable table in the DB so I move on to HAPPY!!

mytable = metadata.no_clue_how_to_get_tables()

s = select([some_table_object])
result = conn.execute(s)

需要什么来替换 mytable = metadata.no_clue_how_to_get_tables() 行以获取 Table 实例?

最佳答案

就像从元数据对象的表字典中查找表一样简单:

mytable = metadata.tables['mytable']

参见 "Reflecting All Tables At Once"了解更多信息。

关于python - 使用 SQLAlchemy 元数据 reflect() 如何获得实际的表对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38883256/

相关文章:

python - 选择查询中的行范围

python - SET 每隔一段时间工作 Python MySQL

python - Pandas :功能和应用于系列之间的时间差异

python - 如果我的 mysql 套接字不在/tmp 中,是否可以将 Mysql 与 SqlAlchemy 和 Flask 一起使用?

python - SQLAlchemy一对一,在每个表中存储外键?

python - SQLAlchemy with_for_update 读取陈旧数据

python pyodbc : how to connect to a specific instance

python - 导入模块在 Jupyter Notebook 中有效,但在 IDLE 中无效

python - 为什么我的环境变量在 github actions 上等于 None ?

python - 找出 sqlalchemy orm 中的根引用