У меня есть база данных x
с некоторым объемом данных, заполненных в каждой таблице. Я хочу создать копию этой базы данных (с той же схемой и точными данными). Сначала я создаю декларативный базовый класс x
, используя automap_base.
from sqlalchemy.ext.automap import automap_base
from sqlalchemy.orm import Session as s
def name_for_scalar_relationship(base, local_cls, referred_cls, constraint):
name = referred_cls.__name__.lower() + "_ref"
return name
Base = automap_base()
# engine, refering to the original database
engine = create_engine("mysql+pymysql://root:password1@localhost:3306/x")
# reflect the tables
Base.prepare(engine, reflect=True, name_for_scalar_relationship=name_for_scalar_relationship)
Router = Base.classes.router
########check the data in Router table
session = s(engine)
r1 = session.query(Router).all()
for n in r1:
print(n.name) #This returns all the router names
Получение помощи от здесь Я использую alembic
для обновления базы данных y
находится в другом месте mysql+pymysql://anum:Anum-6630@localhost:3306/y
.
from sqlalchemy.orm import sessionmaker as sm
from sqlalchemy import create_engine
from alembic import op
# revision identifiers, used by Alembic.
revision = 'fae98f65a6ff'
down_revision = None
branch_labels = None
depends_on = None
def upgrade():
bind = op.get_bind()
session = sm(bind=bind)
Base.metadata.create_all(bind=bind)
# session._add_bind(session, bind=bind)
session.add(Router(id=uuid.uuid().bytes, serial="Test1"))
session.commit()
Строка Base.metadata.create_all(bind=bind)
фактически добавляет все таблицы (включая соответствующие ограничения FK) в базу данных y
, но все таблицы пусты, кроме одной записи в таблице Router, которую я добавил вручную. Я пытался использовать create_all(), но это тоже не сработало. Есть ли способ скопировать все данные из базы данных x
в базу данных y
?