使用 SQLAlchemy Core 的 select,可是没有定义表对象怎么办


你看到了,动态列查询、动态条件查询,两大动态查询都使用 使用 SQLAlchemy Core 的 select 工具来进行实现,发现没有,要想使用 select,那就必须要有表对象,有了表对象,它才能帮你实现各种动态查询条件语句的生成,没有这些表对象为基础,那可就巧妇难为无米之炊了。

那么,是否就一定要把这些表对象一个一个,一列一列,完完整整地重新敲出来呢?

我一开始就是这么干的。

等我干了几个表,发现太折磨人了。如果建表是自己来,那么一定会去写这些个 Table 的定义,但是如果是接手了一个现有的数据库呢?全部重新手打实现,真的就是要死要活了。

作为程序员思维者,Python 生态已经很成熟了吧,SQLAlchemy 如此强大,是否可以帮忙从数据库里面读取这些 Table 信息出来?

结果真的是可以的:

from sqlalchemy import create_engine
from sqlalchemy import MetaData
db_uri = 'mysql+pymysql://username:password@localhost:3306/test'
engine = create_engine(db_uri)
metadata = MetaData()
metadata.reflect(bind=engine)
print(metadata.tables)
# immutabledict({'address': Table('address', MetaData(bind=None), Column('ID', ...

看到输出这么一串,简直想哭啊。

好了,想要怎么用就不用我多说了,有了这个字典,想怎么用怎么用去。