python - 如果 Flask 上不存在表,如何使用 SQLAlchemy 创建表?

标签 python flask sqlalchemy flask-sqlalchemy

我正在使用 SQLAlchemy,并且我有以下代码:

型号:

class User(db.Model):
    __tablename__ = 'user'
    __table_args__ = {'schema': 'task', 'useexisting': True}
    id = Column(Integer, primary_key=True, autoincrement=True)
    firstname = Column(String)

.env

SQLALCHEMY_DATABASE_URI = os.getenv('SQLALCHEMY_DATABASE_URI')

app.py

def create_app(config_file):
    """Create a Flask application using the app factory pattern."""

    app = Flask(__name__)

    """Load configuration."""

    app.config.from_pyfile(config_file)

    """Init app extensions."""
    from .extensions import db

    db.init_app(app)

如果 SQLite 文件不存在,则会创建它,但不会创建每个模型的表。

问题是我该怎么做才能为每个模型创建表?

最佳答案

只需添加:

db.create_all()

app.py 末尾的 create_app() 中。

create_all() 只会在表不存在时创建表,并且不会更改之前创建的表。

如果您想从命令行创建数据库和表,您只需键入:

python
from app.py import db
db.create_all()
exit()

工作示例:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.secret_key = "Secret key"
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///my_database.sqlite3"
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False

db = SQLAlchemy(app)

class Data(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    name = db.Column(db.String(50))
    email = db.Column(db.String(50))
    phone = db.Column(db.String(50))

db.create_all()

# add a row
# comment out after the 1st run
table_row = Data(name="My Name", email="myemail@mail.com", phone="123456")
db.session.add(table_row)
db.session.commit()
print "A row was added to the table"

# read the data
row = Data.query.filter_by(name="My Name").first()
print "Found:", row.email, row.phone

if __name__ == "__main__":
    app.run(debug=True)

这适用于 Python 2.7,要在 Python 3.x 上运行,只需更改 print 语句以调用 print() 函数。

注意:
使用自动模型类构造函数时,传递给模型类构造函数的参数必须keyword参数,否则会出错。否则,您可以像这样覆盖 Data() 类中的 __init__() :

def __init__(self, name, email, phone, **kwargs):
    super(Data, self).__init__(**kwargs)
    self.name = name
    self.email = email
    self.phone = phone

在这种情况下,您不必使用 keyword 参数。

关于python - 如果 Flask 上不存在表,如何使用 SQLAlchemy 创建表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62741661/

相关文章:

python - 如何从文本文件创建嵌套字典

python - 在另一个 python 文件中访问 Flask 应用程序端点?

python - Flask-restful : How to only response to requests come with ('Accept' :'application/json' )?

python - SQLAlchemy:查找与 NULL 父级有关系的子对象

python - 为什么相同的 python 代码有不同的时钟时间?

python - 用于将包发布到 PyPi 的实用程序?

python - 如何模拟作为函数输入的对象?

python - 通过 Flask/Python/Heroku 上传后在哪里可以找到文件?

python - SQLAlchemy MySQL 重复键更新

mysql - 如何使用 sqlalchemy 获得从属滞后?