У меня есть существующая база данных, которую я хочу отразить в своем приложении для колб, чтобы я мог взаимодействовать с базой данных.Я могу отразить базу данных, но тогда я не уверен, как объявить классы, представляющие таблицы в моем коде.
Я много раз искал stackoverflow и другие источники, включая SQLAlchemy и flask-SQLAlchemy, но ответы немногодля продвинутых для меня.
Следующий код работает.
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())
Но я не уверен, как добраться из приведенного выше кода до классов.Например, оператор print выше показывает, что существуют таблицы User и Post.Но если я добавлю следующий код, он говорит, что User и Post не определены.
u1 = User(username='john', email='john@example.com')
p1 = Post(body="post from john",author=u1,timestamp=now + timedelta(seconds=1))
Вот вывод из оператора print.
[
Table('alembic_version', MetaData(bind=None), Column('version_num', VARCHAR(length=32), table=<alembic_version>, primary_key=True, nullable=False), schema=None),
Table('followers', MetaData(bind=None), Column('follower_id', INTEGER(), ForeignKey('user.id'), table=<followers>), Column('followed_id', INTEGER(), ForeignKey('user.id'), table=<followers>), schema=None),
Table('user', MetaData(bind=None), Column('id', INTEGER(), table=<user>, primary_key=True, nullable=False), Column('username', VARCHAR(length=64), table=<user>), Column('email', VARCHAR(length=120), table=<user>), Column('password_hash', VARCHAR(length=128), table=<user>), Column('about_me', VARCHAR(length=140), table=<user>), Column('last_seen', DATETIME(), table=<user>), Column('last_message_read_time', DATETIME(), table=<user>), schema=None),
Table('message', MetaData(bind=None), Column('id', INTEGER(), table=<message>, primary_key=True, nullable=False), Column('sender_id', INTEGER(), ForeignKey('user.id'), table=<message>), Column('recipient_id', INTEGER(), ForeignKey('user.id'), table=<message>), Column('body', VARCHAR(length=140), table=<message>), Column('timestamp', DATETIME(), table=<message>), schema=None),
Table('notification', MetaData(bind=None), Column('id', INTEGER(), table=<notification>, primary_key=True, nullable=False), Column('name', VARCHAR(length=128), table=<notification>), Column('user_id', INTEGER(), ForeignKey('user.id'), table=<notification>), Column('timestamp', FLOAT(), table=<notification>), Column('payload_json', TEXT(), table=<notification>), schema=None),
Table('post', MetaData(bind=None), Column('id', INTEGER(), table=<post>, primary_key=True, nullable=False), Column('body', VARCHAR(length=140), table=<post>), Column('timestamp', DATETIME(), table=<post>), Column('user_id', INTEGER(), ForeignKey('user.id'), table=<post>), Column('language', VARCHAR(length=5), table=<post>), schema=None),
Table('task', MetaData(bind=None), Column('id', VARCHAR(length=36), table=<task>, primary_key=True, nullable=False), Column('name', VARCHAR(length=128), table=<task>), Column('description', VARCHAR(length=128), table=<task>), Column('user_id', INTEGER(), ForeignKey('user.id'), table=<task>), Column('complete', BOOLEAN(), table=<task>), schema=None)
]
Может кто-то указать, как я объявляю классысоответствует таблицам в базе данных.