我使用 SQLAlchemy 创建了一个表:
engine = create_engine('sqlite:///sd.sqlite')
images = Table(
'images', meta,
Column('id', Integer, primary_key = True),
Column('url', String),
...
)
meta.create_all(engine)
这可行,我有一个数据库并且可以用数据填充它。我想创建一个 Flask 应用程序来使用 Flask_SQLAlchemy 访问这些数据,但无法让它工作:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////sd.sqlite'
db = SQLAlchemy(app)
Base = db.declarative_base()
class Images(db.Model):
with app.app_context(): #needed to fix application context error
__table__ = db.Table('images', Base.metadata),
""" with app.app_context():
db.Model.metadata.reflect(db.engine) """
@app.route("/")
def hello_world():
images = Images.query.all()
return images
app.run(port=8131)
这会出现以下错误:
Mapper Mapper[Images(images)] 无法组装映射表“images”的任何主键列
但是我指定了一个主键。我做错了什么?
所以,事实证明我的代码有两个问题:
sqlite:
Images = db.Table(
"images",
db.Model.metadata,
autoload_with=db.engine
)
db.reflect()
而不是 declarative_base