python - Flask_SQLAlchemy 不能像 SQLAlchemy 一样反映数据库
问题描述
我正在尝试使用将外国人数据库连接到python-Flask
应用程序Flask_SQLALchemy
我到处寻找,包括FLASK_SQLALCHEMY 官方文档
,过去 4 天我一直在互联网上到处寻找该功能FLASK_SQLALCHEMY
库的任何教程,ORM
但没有运气
我一直在查看SQLAlchemy Reflecting 文档,但我对决定下一步做什么感到困惑
这是我的烧瓶代码:
Base = automap_base()
xDB = 'postgres://****'
engine = db.create_engine(xDB)
metadata = db.MetaData()
Session = db.sessionmaker(bind=engine)
session = db.scoped_session(engine)
Base.metadata.reflect(engine)
y = [db.Table(table,metadata,autoload=True,autoload_with=engine) for
table in engine.table_names()]
我尝试根据我在许多来源中阅读的内容以多种不同方式进行查询Flask_SQLAlchemy
尝试#1:
t = db.select('test1').limit(10)
engine.execute(t).fetchall()
输出 :
t = SELECT test1.id, test1.name FROM test1 LIMIT :param_1
尝试#2:
t = db.session.query([test1])
输出:
sqlalchemy.exc.InvalidRequestError:需要 SQL 表达式、列或映射实体 - 得到 '[Table('test1', MetaData(bind=None), Column('id', INTEGER(), table=, nullable=False, server_default =DefaultClause(, for_update=False)), Column('name', VARCHAR(), table=, nullable=False), schema=None)]'
我以为它已经映射了..since autoLoad = True
,Base = automap_base()
并且Base.metadata.reflect(engine)
尝试#3:
t = metadata.tables['test1']
输出:
KeyError: Table('test1', MetaData(bind=None), Column('id', INTEGER(), table=, nullable=False, server_default=DefaultClause(, for_update=False)), Column('name', VARCHAR (), table=, nullable=False), schema=None)
我不明白他们metadata
的已经定义为metadata = db.MetaData()
我找不到旧的或新的 Flask_SQLAlchemy 的任何东西,但我可以看到一些不适用于Flask_SQLAlchemy
库的 SQLAlchemy 资源,有人可以帮忙吗?
解决方案
不要使用Flask_SQLAlchemy
and 使用常规SQLAlchemy