db.create_all() doesn#39;t create tables defined in separate file(db.create_all()不创建在单独文件中定义的表)
本文介绍了db.create_all()不创建在单独文件中定义的表的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我正在尝试为我的模型创建表,这些表是在与我的应用程序不同的模块中定义的。我调用db.create_all()
,但没有创建表,也没有错误。我已经定义了模型和imported them before calling create_all
。为什么这不起作用?
from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql+psycopg2://postgres:123@localhost/flask'
db = SQLAlchemy(app)
from models import User
db.create_all()
db.session.commit()
models.py
:
from flask.ext.sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class User(db.Model):
__tablename__ = 'users'
uid = db.Column(db.Integer, primary_key = True)
推荐答案
您创建了两个单独的数据库实例,一个与应用程序一起创建,另一个与模型一起创建。每个实例都有自己的元数据,用于存储在其上定义的表。您用来发出CREATE TABLE语句的那条语句不是定义模型的那条语句。您应该只使用扩展的一个实例,并在需要时将其导入。
myapp/__init__.py
:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
db = SQLAlchemy(app)
# import the models *after* the db object is defined
from myapp import models
myapp/models.py
:
from myapp import db
class User(db.Model):
...
create_tables.py
:
from myapp import app, db
with app.app_context():
db.create_all()
其他注意事项:
- 您应该将您的应用程序组织为包,以便所有内容都可以导入到一个位置。
flask.ext
已弃用,请直接从其包名导入扩展。- Flask-SQLAlChemy自动从类名生成
__tablename__
,您不需要自己定义它。 create_all
之后无需调用commit
。
这篇关于db.create_all()不创建在单独文件中定义的表的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:db.create_all()不创建在单独文件中定义的表


猜你喜欢
- 沿轴计算直方图 2022-01-01
- python check_output 失败,退出状态为 1,但 Popen 适用于相同的命令 2022-01-01
- python-m http.server 443--使用SSL? 2022-01-01
- pytorch 中的自适应池是如何工作的? 2022-07-12
- 如何将一个类的函数分成多个文件? 2022-01-01
- 如何在 python3 中将 OrderedDict 转换为常规字典 2022-01-01
- 使用Heroku上托管的Selenium登录Instagram时,找不到元素';用户名'; 2022-01-01
- 分析异常:路径不存在:dbfs:/databricks/python/lib/python3.7/site-packages/sampleFolder/data; 2022-01-01
- padding='same' 转换为 PyTorch padding=# 2022-01-01
- 如何在 Python 的元组列表中对每个元组中的第一个值求和? 2022-01-01