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

标签 python flask flask-sqlalchemy

我是 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/

相关文章:

python - 如何使用 sklearn 预处理器

python - python Flask应用程序中使用json对象上传文件的POST方法

python - 在 Flask 中,如何使用安全 session 通过 curl 对用户进行身份验证?

javascript - FlaskWTF 如何向 Vue 前端发送 CSRF token

python - flask +uwsgi+nginx : When is memory released?

python - 如何获得flask_sqlalchemy 类的PEP 484 类型提示?

python - 整合 Pandas 中的数据

python - 迭代 Django Rest API 并获取错误

python - Qt 树形部件 python;迭代列

flask - Flask-SQLAlchemy 中的一对一关系仅以一种方式工作