我只是在现有数据库上做了很多选择。
我需要获取一个Table对象,所以我做了类似
的操作 s = select([some_table_object])
我已经想过如何明确地反映单个表来获取表对象:
from sqlalchemy import *
conn = create_engine('mysql://....')
metadata = MetaData(conn)
mytable = Table('mytable', meta, autoload=True)
s = select([mytable])
result = conn.execute(s)
# HAPPY!!!!
但是,这对于每个表都必须这样做很繁琐(我会去很多表)。我知道我可以以某种方式使用MetaData
类来反映我连接的现有数据库,但我不确定如何从元数据中获取实际的相应表。
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
个实例需要什么?
答案 0 :(得分:6)
就像从元数据对象的表字典中查找表一样简单:
mytable = metadata.tables['mytable']
有关详细信息,请参阅"Reflecting All Tables At Once"。
答案 1 :(得分:1)
如果不确定最初存在哪些表,可以执行此查询以检查数据库表。
from sqlalchemy import create_engine
from sqlalchemy.engine import reflection
# Create connection string & engine
connection_string = "sql_connection_string"
engine = create_engine(connection_string, echo=False)
# Performs database schema inspection
insp = reflection.Inspector.from_engine(engine)
print(insp.get_table_names())
然后,您可以像上面的回答状态一样从表中选择元数据。
Inspector.get_table_names()
返回特定模式内引用的所有表名。这不会返回视图。而是使用Inspector.get_view_names()
方法返回视图。 Docs