pyn*_*bee 6 python sql database sql-server pandas
有人知道可以将大量表(大约 100 个表)从一个数据库复制到 SQL Server 中的另一个数据库的好的 Python 代码吗?
我问是否有办法在 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.')
Run Code Online (Sandbox Code Playgroud)
SQLAlchemy 实际上是一个很好的工具,可用于在第二个数据库中创建相同的表:
table = Table('test_table', metadata, autoload=True, autoload_with=db1)
table.create(engine=db2)
Run Code Online (Sandbox Code Playgroud)
此方法还将生成正确的键、索引、外键。创建所需的表后,如果表相对较小,您可以通过选择/插入来移动数据,或者使用 bcp 实用程序将表转储到磁盘,然后将其加载到第二个数据库中(要快得多,但需要做更多的工作才能将其正常工作)
如果使用选择/插入,那么最好分批插入 500 条左右的记录。
你可以这样做:
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)
Run Code Online (Sandbox Code Playgroud)
但它可能会非常慢。使用 SQL Server 工具来完成这项工作。
考虑使用sp_addlinkedserver过程将一个 SQL Server 与另一个 SQL Server 链接。之后您可以执行:
SELECT * INTO server_name...table_name FROM table_name
Run Code Online (Sandbox Code Playgroud)
对于db1数据库中的所有表。
PS 这也可以在 Python + SQLAlchemy 中完成......