gpt4 book ai didi

python - 在 Flask-SQLAlchemy 中,我应该使用 create_all() 在生产环境中创建表吗?

转载 作者:太空宇宙 更新时间:2023-11-03 17:08:03 26 4
gpt4 key购买 nike

我是 Flask 新手。我正在研究 Flask-SQLAlchemy,并且我也尝试过 Flask-Migrate。

可以方便地快速创建生产和测试环境。

但我认为它不如Django-Migration方便。

当我尝试创建多对多数据模型时。有时我会遇到以下错误:

sqlalchemy.exc.IntegrityError: (_mysql_exceptions.IntegrityError) (1215, 'Cannot add foreign key constraint') [SQL: u'
CREATE TABLE ad_accounts (
access_token_id INTEGER,
ad_account_id INTEGER,
FOREIGN KEY(access_token_id) REFERENCES fb_access_token (id),
FOREIGN KEY(ad_account_id) REFERENCES ad_account (id)
)
']

我的模型:

from sqlalchemy.dialects.mysql import BIGINT

ad_accounts = db.Table('ad_accounts',
db.Column('access_token_id', db.Integer, db.ForeignKey('fb_access_token.id')),
db.Column('ad_account_id', db.Integer, db.ForeignKey('ad_account.id'))
)


class AdAccount(db.Model):
__bind_key__ = 'ads'
__tablename__ = 'ad_account'

id = db.Column(db.Integer, primary_key=True)
account_id = db.Column(BIGINT(unsigned=True), default=None)
account_status = db.Column(db.Integer, default=None)
business_name = db.Column(db.String(255), default='')
owner = db.Column(db.String(255), default='')
timezone_name = db.Column(db.String(255), default='')
created_time = db.Column(db.Integer, default=0)
activities = db.relationship('Activity', backref='ad_account', lazy='dynamic')


class FbAccessToken(db.Model):
__bind_key__ = 'ads'
__tablename__ = 'fb_access_token'

id = db.Column(db.Integer, primary_key=True)
admin_id = db.Column(db.Integer, db.ForeignKey('admin_user.admin_id'))
# fb_account_id = db.Column(db.String(32), default='')
ad_accounts = db.relationship('AdAccount', secondary=ad_accounts, backref='access_token_list', lazy='dynamic')
update_time = db.Column(db.Integer, default=0)
page_id = db.Column(BIGINT(unsigned=True), default=0)
current_account_id = db.Column(BIGINT(unsigned=True), nullable=True)

每次我在产品环境中运行'python app.py db Upgrade'时,我都害怕破坏它。

有人告诉我应该通过手动 SQL 更改表。

我现在很困惑,我想以一种方便的方式做到这一点,我曾经在 django-migration 中做到这一点。

假设我已经在产品环境中创建了数据库和表,我还需要执行create_all或'python app.py db update'(在Flask-Migrate中)吗?

<小时/>

如何在 Flask-Migrate 中的列上添加注释?

最佳答案

在生产中的现有数据库上,您显然不希望重新创建数据库架构并丢失任何现有数据。查看数据库迁移,以下是相关包:

关于python - 在 Flask-SQLAlchemy 中,我应该使用 create_all() 在生产环境中创建表吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34407842/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com