Создать бд с помощью alembic python(flask)
Достался проект в котором бд поддерживается напрямую через alembic, а не flask-migrate . Как мне создать таблицы в бд с помощью команд alembic на основе уже написанной модели? Дело в том, что там, как бы помягче выразится, своеобразная архитектура и сам объект db выловить не так-то и просто. В документации я ничего не нашёл про инициализацию бд на основе уже написанных моделей, только миграции с прямыми командами самой алхимии. При попытке обратится к созданным вручную через субд таблицам в самом приложении, sqlalchemy ругается и выдаёт ошибку: no such table: user(например). Хотя открывая напрямую через бд можно найти эту таблицу и даже делать выборку(на тесте решил постаивть sqlite, на боевом сервере стоит postgres, если это важно).
Файл с моделями models.py:
from .ext import db
from hashlib import sha1
from flask import request
from datetime import datetime
class User(db.Model):
__tablename__ = 'user'
user_id = db.Column(db.Integer, primary_key=True)
email = db.Column(db.String(80), unique=True, nullable=False)
password = db.Column(db.LargeBinary(), nullable=False)
secret = db.Column(db.String(20), nullable=False)
activated = db.Column(db.DateTime)
exchanges = db.relationship('Exchange', back_populates='user', cascade='all, delete-orphan', passive_deletes=True)
buylogs = db.relationship('BuyLog', back_populates='user', cascade='all, delete-orphan', passive_deletes=True)
# FE-1 29.02.20
parent_id = db.Column(db.Integer, db.ForeignKey('user.user_id', ondelete='CASCADE'))
parent = db.relationship('User', backref='children', remote_side='User.user_id')
referal_ext = db.Column(db.String(30), unique=True)
referal_bonuses = db.Column(db.Float)
# FE-1_
def __init__(self, email, password, secret):
self.email = email
self.password = password
self.secret = secret
# FE-1 29.02.20
self.activated = datetime.now()
h = sha1(self.email.encode('utf-8')).hexdigest()[:10]
self.referal_ext = f'?friend={h}' # FE-1 29.02.20
# FE-1 29.02.20
def __repr__(self):
if self.parent:
return f'<User {self.email} refered: {self.parent} ref_link: \
{request.url_root}/{self.referal_ext}>'
else:
return f'<User {self.email}>'
class Exchange(db.Model):
__tablename__ = 'exchange'
exchange_id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('user.user_id', ondelete='CASCADE'), nullable=False)
user = db.relationship('User', back_populates='exchanges')
name = db.Column(db.String(40), nullable=False)
key = db.Column(db.String(256))
secret = db.Column(db.String(256))
password = db.Column(db.String(256))
buytasks = db.relationship('BuyTask', back_populates='exchange', cascade='all, delete-orphan', passive_deletes=True)
valid = db.Column(db.Boolean)
def __init__(self, name, key, secret, password):
self.name = name
self.key = key
self.secret = secret
self.password = password
self.valid = True
class BuyTask(db.Model):
__tablename__ = 'buytask'
buytask_id = db.Column(db.Integer, primary_key=True)
exchange_id = db.Column(db.Integer, db.ForeignKey('exchange.exchange_id', ondelete='CASCADE'), nullable=False)
exchange = db.relationship('Exchange', back_populates='buytasks')
pair = db.Column(db.String(40), nullable=False)
amount = db.Column(db.Numeric)
interval = db.Column(db.Integer)
next_buy = db.Column(db.DateTime, nullable=False)
valid = db.Column(db.Boolean)
def __init__(self, pair, amount, interval, next_buy):
self.pair = pair
self.amount = amount
self.interval = interval
self.next_buy = next_buy
self.valid = True
class BuyLog(db.Model):
__tablename__ = 'buylog'
buylog_id = db.Column(db.Integer, primary_key=True)
user_id = db.Column(db.Integer, db.ForeignKey('user.user_id', ondelete='CASCADE'), nullable=False)
user = db.relationship('User', back_populates='buylogs')
exchange = db.Column(db.String(40), nullable=False)
pair = db.Column(db.String(40), nullable=False)
executed = db.Column(db.DateTime, nullable=False)
quote = db.Column(db.Numeric)
base = db.Column(db.Numeric)
def __init__(self, user_id, exchange, pair, executed, quote, base):
self.user_id = user_id
self.exchange = exchange
self.pair = pair
self.executed = executed
self.quote = quote
self.base = base
Собственно сам вопрос: Можно ли создать бд с помощью уже написанных моделей sqlalchemy и команд alembic? Заранее спасибо за ответ.