我有一个要反映到我的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))
有人可以指出我如何声明与数据库中的表相对应的类。
答案 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))
希望对您有帮助