首页 > 解决方案 > 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 = TrueBase = 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 资源,有人可以帮忙吗?

标签: pythonsqlflasksqlalchemyflask-sqlalchemy

解决方案


不要使用Flask_SQLAlchemyand 使用常规SQLAlchemy


推荐阅读