@maximkalga

Как в Flask + Peewee ORM инициализировать таблицы в базе(syncdb)?

Не работал с фласком и его стэком. Нужно запустить готовый проект. Вот его зависимости:

Flask==0.10.1
Flask-Login==0.3.1
Flask-Testing==0.4.2
Flask-WTF==0.12
Jinja2==2.8
MarkupSafe==0.23
WTForms==2.0.2
Werkzeug==0.10.4
argparse==1.2.1
flask-peewee==0.6.6
funcsigs==0.4
itsdangerous==0.24
mock==1.3.0
nose==1.3.7
pbr==1.8.0
peewee==2.6.4
psycopg2==2.6.1
requests==2.7.0
six==1.9.0
wsgiref==0.1.2
wtf-peewee==0.2.3


установил все в виртуалку, запустил сервер, все ок

runserver.py

from myproject import create_app
app = create_app()

if __name__ == '__main__':
    app.run(debug=True, port=5000, host='0.0.0.0')

Осталось создать таблицы в базе. Вот описание моделей с peewee

models.py

from peewee import Model, CharField, IntegerField, DateTimeField, DecimalField, TextField, datetime as peewee_datetime
from playhouse.pool import PooledPostgresqlExtDatabase

from .config import BaseConfig


db = PooledPostgresqlExtDatabase(**BaseConfig.DATABASE)
db.commit_select = True
db.autorollback = True


class BaseModel(Model):
    class Meta:
        database = db

    def save(self, **kwds):
        with db.transaction():
            Model.save(self, **kwds)


class Payment(BaseModel):
    class Meta:
        db_table = "payments"

    card_number = CharField()
    amount = DecimalField()
    ...
    ...
    ...


def init_db():
    try:
        db.connect()
        map(lambda l: db.drop_table(l, True), (Payment,))
        print "tables dropped"
        map(lambda l: db.create_table(l, True), (Payment,))
        print "tables created"
    except:
        db.rollback()
        raise


Как создать таблицы? Есть ли что-то типа "python manage.py migrate" по аналогии с Django?
  • Вопрос задан
  • 856 просмотров
Решения вопроса 1
@maximkalga Автор вопроса
Нужно было в шелле импортировать init_db() из models.py и запустить. Миграции из peewee тут не используются.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы