在SQL Server中使用Python将表从一个数据库复制到另一个数据库

7

有没有人知道一个好的Python代码,可以在SQL Server中从一个数据库复制大量表(约100个表)到另一个数据库?

我之所以问是否有Python的方法来完成此操作,是因为由于我工作场所的限制,我无法仅使用SQL Server在不同数据库之间复制表。

以下是一个简单的Python代码,可以将一个表从一个数据库复制到另一个数据库。如果我想复制100个表,我想知道是否有更好的编写方式。

print('Initializing...')

import pandas as pd
import sqlalchemy
import pyodbc

db1 = sqlalchemy.create_engine("mssql+pyodbc://user:password@db_one")
db2 = sqlalchemy.create_engine("mssql+pyodbc://user:password@db_two")

print('Writing...')

query = '''SELECT * FROM [dbo].[test_table]'''
df = pd.read_sql(query, db1)
df.to_sql('test_table', db2, schema='dbo', index=False, if_exists='replace')

print('(1) [test_table] copied.')

2
你确定源数据库中的__所有__表格都能适应你要运行Python脚本的机器的内存吗? - MaxU - stand with Ukraine
{btsdaf} - Albatross
@MaxU 是的,我们将为此专门分配一个数据库。 - pynewbee
@Confused,你能给我展示一段样例代码或者告诉我Python如何读取文本文件吗?非常感谢!!!我对Python真的很陌生。 - pynewbee
请参考(https://dev59.com/nnA75IYBdhLWcg3weY5f)。您可以忽略列表部分。 - Albatross
2个回答

11

SQLAlchemy是一个很好的工具,可以用来在第二个数据库中创建相同的表:

table = Table('test_table', metadata, autoload=True, autoload_with=db1)
table.create(engine=db2)

这种方法还可以生成正确的键、索引和外键。一旦创建所需的表格,您就可以通过select或insert来移动数据(如果表格相对较小),或者使用bcp实用程序将表格转储到磁盘,然后将其加载到第二个数据库中(速度更快,但需要更多工作才能使其正常工作)。

如果使用select/insert,则最好分批插入大约500条记录。


2
"这个方法还会生成正确的键、索引和外键。" - MaxU - stand with Ukraine
我不太懂select/insert部分。我该如何使用SQLAlchemy来简洁地完成这个操作? - Mateus Felipe
@Mateus Felipe:类似这样:for rec in select(table1): table2.insert(rec)。最好将其作为一个单独的问题进行讨论。如果您这样做,请确保发布代码示例。 - Muposat
@Muposat 谢谢你的回答!我实际上搜索了更多,找到了这个:https://dev59.com/tWEi5IYBdhLWcg3wBH6J - Mateus Felipe

2
你可以像这样做:

你可以这样做:

tabs = pd.read_sql("SELECT table_name FROM INFORMATION_SCHEMA.TABLES", db1)

for tab in tabs['table_name']:
    pd.read_sql("select * from {}".format(tab), db1).to_sql(tab, db2, index=False)

但是这可能会非常慢。使用SQL Server工具来完成这个任务。

考虑使用sp_addlinkedserver过程将一个SQL Server链接到另一个SQL Server。之后,您可以执行以下操作:

SELECT * INTO server_name...table_name FROM table_name

对于来自db1数据库的所有表格。

PS这也可以使用Python + SQLAlchemy完成...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接