我正在尝试为我的模型创建表格,这些表格在我的应用程序的单独模块中定义。我调用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)
答案 0 :(得分:11)
您创建了两个单独的数据库实例,一个与应用程序一起创建,另一个与模型一起创建。每个实例都有自己的元数据,用于存储在其上定义的表。您用于发出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
,直接从其软件包名称导入扩展名。__tablename__
,您无需自己定义。commit
之后致电create_all
。