2013-12-23 5 views
24

Я пытаюсь интегрировать PostgreSQL и SQLAlchemy, но SQLAlchemy.create_all() не создает таблицы из моих моделей.SQLAlchemy create_all() не создает таблицы

Мой код:

from flask import Flask 
from flask.ext.sqlalchemy import SQLAlchemy 

app = Flask(__name__) 
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql+psycopg2://login:[email protected]/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', '[email protected]') 
guest = User('guest', '[email protected]') 
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

Как я могу это исправить?

+0

Вы проверили это 'from yourapplication import db db.create_all()' using shell? –

+0

Пожалуйста, распечатайте весь трекбек –

+0

добавьте '__tablename__ =" users "' к вашей модели и повторите попытку. – ajkumar25

ответ

49

Вы должны поместить свой класс модели, прежде чем create_all() вызова, например:

from flask import Flask 
from flask_sqlalchemy import SQLAlchemy 

app = Flask(__name__) 

app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql+psycopg2://login:[email protected]/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', '[email protected]') 
guest = User('guest', '[email protected]') 
db.session.add(admin) 
db.session.add(guest) 
db.session.commit() 
users = User.query.all() 
print users 

Если ваши модели объявлены в отдельном модуле, импортировать их перед вызовом create_all().

Скажем, User модель находится в файле с именем models.py,

Важное примечание: Важно, чтобы вы импортировать модели после инициализации db объекта, поскольку в вашем models.py _you также необходимо импортируйте объект db из этого модуля.

+7

Это не так - приложение не указано в строке 4? – willcwf

+0

@willcwf для mxi1 это сработало. я не знаю, как x-) – Besnik

Смежные вопросы