Python db.create_all()不';t创建在单独文件中定义的表

Python db.create_all()不';t创建在单独文件中定义的表,python,flask,sqlalchemy,flask-sqlalchemy,Python,Flask,Sqlalchemy,Flask Sqlalchemy,我正在尝试为我的模型创建表,这些模型是在我的应用程序的单独模块中定义的。我调用了db.create_all(),但没有创建任何表,也没有错误。我已经定义了模型和。为什么这样不行 from flask import Flask from flask.ext.sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql+psycopg2://postgre

我正在尝试为我的模型创建表,这些模型是在我的应用程序的单独模块中定义的。我调用了db.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)
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
from myapp import db

class User(db.Model):
    ...
from myapp import app, db

with app.app_context():
    db.create_all()

您创建了两个单独的db实例,一个与应用程序一起创建,另一个与模型一起创建。每个实例都有自己的元数据,用于存储在其上定义的表。您用来发出CREATETABLE语句的不是定义模型的那个。您应该只使用扩展的一个实例,在需要时导入它

myapp/\uuuuuu init\uuuuuuuu.py

from flask.ext.sqlalchemy import SQLAlchemy

db = SQLAlchemy()

class User(db.Model):
  __tablename__ = 'users'
  uid = db.Column(db.Integer, primary_key = True)
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
from myapp import db

class User(db.Model):
    ...
from myapp import app, db

with app.app_context():
    db.create_all()
myapp/models.py

from flask.ext.sqlalchemy import SQLAlchemy

db = SQLAlchemy()

class User(db.Model):
  __tablename__ = 'users'
  uid = db.Column(db.Integer, primary_key = True)
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
from myapp import db

class User(db.Model):
    ...
from myapp import app, db

with app.app_context():
    db.create_all()
create_tables.py

from flask.ext.sqlalchemy import SQLAlchemy

db = SQLAlchemy()

class User(db.Model):
  __tablename__ = 'users'
  uid = db.Column(db.Integer, primary_key = True)
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
from myapp import db

class User(db.Model):
    ...
from myapp import app, db

with app.app_context():
    db.create_all()

其他需要注意的事项:

  • 你应该将你的应用程序组织成一个包,这样所有东西都可以在一个位置下导入
  • flask.ext
    已弃用,请直接从其包名导入扩展名
  • Flask SQLAlchemy根据类名自动生成
    \uuuuuuuuuuuuuuuuuuuuuuuu
    ,您不需要自己定义它
  • 您不必在
    create\u all
    之后调用
    commit