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 文件不存在,则会创建该文件,但不会创建每个模型的表。
问题是我该怎么做才能为每个模型创建表?
只需添加:
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参数。