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

Tla*_*-ES 5 python sqlalchemy flask 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)
Run Code Online (Sandbox Code Playgroud)

.env

SQLALCHEMY_DATABASE_URI = os.getenv('SQLALCHEMY_DATABASE_URI')
Run Code Online (Sandbox Code Playgroud)

应用程序.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)
Run Code Online (Sandbox Code Playgroud)

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

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

Chu*_*cro 9

只需添加:

db.create_all()
Run Code Online (Sandbox Code Playgroud)

app.py的末尾create_app()

create_all()仅当表不存在时才会创建它们,并且不会更改之前创建的表。

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

python
from app.py import db
db.create_all()
exit()
Run Code Online (Sandbox Code Playgroud)

工作示例:

db.create_all()
Run Code Online (Sandbox Code Playgroud)

这是针对 Python 2.7 的,要与 Python 3.x 一起运行,只需更改print调用该print()函数的语句即可。

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

python
from app.py import db
db.create_all()
exit()
Run Code Online (Sandbox Code Playgroud)

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