首页 > 解决方案 > SQLAlchemy python相同地复制表并将其粘贴到其他地方

问题描述

我有一个 MySQL DB,它有一个主键为 VARCHAR(4) 的表,并且包含 10 个包含 FLOAT 的列。我试图复制表并将其粘贴到其他地方,但是当 read_sql() 时,它会更改表的格式,例如将 VARCHAR(4) 和 FLOAT 更改为 TEXT 并将过去的主键更改为常规列。最后它添加了一个索引。我的问题是,如何以相同的方式复制表、更改数据并将其写入另一个具有类似格式的数据库。

标签: pythonmysqlsqlalchemyread-sql

解决方案


您的问题意味着您正在寻找基于 SQLAlchemy 的表迁移。通常,我会改用mysqldump之类的实用程序。我做了一些搜索并成功测试了一个基于 SQLAlchemy 的解决方案。使用来自https://www.paulsprogrammingnotes.com/2014/01/clonecopy-table-schema-from-one.html的配方

from sqlalchemy import create_engine, Table, Column, Integer, Unicode, MetaData, String, Text, update, and_, select, func, types

# create engine, reflect existing columns, and create table object for oldTable
srcEngine = create_engine('mysql+mysqldb://username:password@111.111.111.111/database') # change this for your source database
srcEngine._metadata = MetaData(bind=srcEngine)
srcEngine._metadata.reflect(srcEngine) # get columns from existing table
srcTable = Table('oldTable', srcEngine._metadata)

# create engine and table object for newTable
destEngine = create_engine('mysql+mysqldb://username:password@localhost/database') # change this for your destination database
destEngine._metadata = MetaData(bind=destEngine)
destTable = Table('newTable', destEngine._metadata)

# copy schema and create newTable from oldTable
for column in srcTable.columns:
    destTable.append_column(column.copy())
destTable.create()

您需要将连接字符串替换为您自己的,并将表名更改为您自己的。


推荐阅读