我正在尝试集成PostgreSQL和SQLAlchemy,但是SQLAlchemy.create_all()并未从我的模型中创建任何表。
我的代码:
from flask import Flask from flask.ext.sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql+psycopg2://login:pass@localhost/flask_app' db = SQLAlchemy(app) db.create_all() db.session.commit() class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(80), unique=True) email = db.Column(db.String(120), unique=True) def __init__(self, username, email): self.username = username self.email = email def __repr__(self): return '<User %r>' % self.username admin = User('admin', 'admin@example.com') guest = User('guest', 'guest@example.com') db.session.add(admin) db.session.add(guest) db.session.commit() users = User.query.all() print users
但是我得到这个错误: sqlalchemy.exc.ProgrammingError: (ProgrammingError) relation "user" does not exist
sqlalchemy.exc.ProgrammingError: (ProgrammingError) relation "user" does not exist
我怎样才能解决这个问题?
您应该在create_all()调用之前放置模型类,如下所示:
create_all()
from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql+psycopg2://login:pass@localhost/flask_app' db = SQLAlchemy(app) class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(80), unique=True) email = db.Column(db.String(120), unique=True) def __init__(self, username, email): self.username = username self.email = email def __repr__(self): return '<User %r>' % self.username db.create_all() db.session.commit() admin = User('admin', 'admin@example.com') guest = User('guest', 'guest@example.com') db.session.add(admin) db.session.add(guest) db.session.commit() users = User.query.all() print users
如果您的模型是在单独的模块中声明的,请在调用之前将其导入create_all()。
说,User模型在名为的文件中models.py,
User
models.py
from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql+psycopg2://login:pass@localhost/flask_app' db = SQLAlchemy(app) # See important note below from models import User db.create_all() db.session.commit() admin = User('admin', 'admin@example.com') guest = User('guest', 'guest@example.com') db.session.add(admin) db.session.add(guest) db.session.commit() users = User.query.all() print users
重要说明: 在初始化db对象之后导入模型很重要,因为在models.py_中,您还需要db从此模块导入对象。
db