Flask_SQLAlchemy 无法读取在 SQLAlchemy 中创建的表的结构

问题描述 投票:0回答:1

我使用 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”的任何主键列

但是我指定了一个主键。我做错了什么?

python sqlite flask-sqlalchemy
1个回答
0
投票

所以,事实证明我的代码有两个问题:

  1. 我需要指定数据库文件的绝对路径。另外,
    sqlite:
  2. 之后只能有三个斜杠
  3. 我必须使用以下语法来获取我的表架构:
 Images = db.Table(
         "images", 
         db.Model.metadata,
         autoload_with=db.engine
    )
  1. 我必须使用
    db.reflect()
    而不是 declarative_base
© www.soinside.com 2019 - 2024. All rights reserved.