在Flask SQLAlchemy中反映数据库

时间:2019-06-24 03:12:45

标签: python flask-sqlalchemy

我有一个要反映到我的flask应用程序中的现有数据库,以便可以与该数据库进行交互。我可以反映数据库,但是不确定如何在我的代码中声明代表表的类。

我已经对stackoverflow和其他来源(包括SQLAlchemy和flask-SQLAlchemy)进行了很多搜索,但是答案对我来说有些先进。

以下代码有效。

if (response.IsSuccessStatusCode)
{
    // Assuming the use of Newtonsoft.Json
    var responseBody = JsonConvert.DeserializeObject<RequestResponse>(await response.Content.ReadyAsStringAsync());

    return Ok(responseBody);
}

但是我不确定如何从上述代码转到类。例如,上面的打印语句显示表User和Post存在。但是,如果我添加以下代码,则它说User和Post是未定义的。

    from flask import Flask
    from flask_sqlalchemy import SQLAlchemy

    app = Flask(__name__)
    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///.../app.db'
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

    db = SQLAlchemy(app)

    db.reflect(bind='__all__', app=None)
    model = db.Model
    meta = db.metadata
    engine = db.engine

    print(db.get_tables_for_bind())

这是打印语句的输出。

u1 = User(username='john', email='john@example.com')
p1 = Post(body="post from john",author=u1,timestamp=now + timedelta(seconds=1))

有人可以指出我如何声明与数据库中的表相对应的类。

1 个答案:

答案 0 :(得分:0)

您可以制作一个 .py 文件来定义您的模型(例如-models.py) 并将数据库导入文件将path.to.file更改为实际位置

models.py

from sqlalchemy import Column
from sqlalchemy import Unicode
from sqlalchemy import DateTime
from sqlalchemy import ForeignKey
from sqlalchemy import Integer

from path.to.file import db


class User(db.Model):

    __tablename__ = 'User'

    rid = Column(Integer, primary_key=True)
    username = Column(Unicode(100), nullable=False, unique=True)
    email = Column(Unicode(50), nullable=False, unique=True)


class Post(db.Model):

    __tablename__ = 'Post'

    rid = Column(Integer, primary_key=True)
    author = Column(Integer, ForeignKey('User.rid', ondelete='cascade'), nullable=False)
    body = Column(Unicode(500), nullable=False, unique=True)
    timestamp = Column(DateTime(timezone=True))

现在,您可以导入User and Post模型,例如

from ./models import User
from ./models import Post

u1 = User(username='john', email='john@example.com')
p1 = Post(body="post from john",author=u1,timestamp=now + timedelta(seconds=1))

希望对您有帮助