Как подключить ДБ в двух файлах?
в первом файле,я подключаю ДБ и настраиваю её:
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///massages.db'
db = SQLAlchemy(app)
class DataBase(db.Model):
id = db.Column(db.Integer, primary_key=True)
id_user = db.Column(db.Integer)
type= db.Column(db.String(10))
type_int = db.Column(db.Integer)
massege = db.Column(db.Text)
id_user_bans = db.Column(db.Integer)
def __repr__(self):
return '<DataBase %r>' % self.id
как мне эту же базу подключить в другом файле?
Ответы (1 шт):
Автор решения: user367654
→ Ссылка
Я использую данный код и запускаю global_init перед app.run() а далее создаю сессию через create_session()
import sqlalchemy as sa
import sqlalchemy.orm as orm
from sqlalchemy.orm import Session
import sqlalchemy.ext.declarative as dec
def global_init(db_file):
global __factory
if __factory:
return
if not db_file or not db_file.strip():
raise Exception("Необходимо указать файл базы данных.")
conn_str = f'sqlite:///{db_file.strip()}?check_same_thread=False'
print(f"Подключение к базе данных по адресу {conn_str}")
engine = sa.create_engine(conn_str, echo=False)
__factory = orm.sessionmaker(bind=engine)
from . import __all_models
SqlAlchemyBase.metadata.create_all(engine)
def create_session() -> Session:
global __factory
return __factory()
SqlAlchemyBase = dec.declarative_base()
__factory = None
в __all_models импортируются все модели. Модель выглядит например так:
import datetime
from werkzeug.security import *
import sqlalchemy
from .db_session import SqlAlchemyBase
from flask_login import UserMixin
from sqlalchemy_serializer import SerializerMixin
class User(SqlAlchemyBase, UserMixin, SerializerMixin):
__tablename__ = 'users'
id = sqlalchemy.Column(sqlalchemy.Integer,
primary_key=True, autoincrement=True)
email = sqlalchemy.Column(sqlalchemy.String, unique=True)
nick = sqlalchemy.Column(sqlalchemy.String)
karma = sqlalchemy.Column(sqlalchemy.Integer, default=0)
hashed_password = sqlalchemy.Column(sqlalchemy.String)
modified_date = sqlalchemy.Column(sqlalchemy.DateTime,
default=datetime.datetime.now)
confirm = sqlalchemy.Column(sqlalchemy.Boolean, default=False)
def set_password(self, password):
self.hashed_password = generate_password_hash(password)
def check_password(self, password):
return check_password_hash(self.hashed_password, password)