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

时间:2017-10-25 21:26:03

标签: python sql sql-server database pandas

有没有人知道一个好的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 个答案:

答案 0 :(得分:2)

SQLAlchemy实际上是用于在第二个db中创建相同表的好工具:

<Button
        android:id="@+id/keyboard_button_Q"
        android:layout_width="0dp"
        android:layout_weight="1"
        android:layout_height="wrap_content"
        android:background="@android:color/transparent"
        android:minWidth="0dp"
        style="?android:attr/buttonBarButtonStyle"
        android:padding="0dp"
        android:text="Q"
        app:layout_constraintEnd_toStartOf="@id/keyboard_button_W"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

此方法还将生成正确的密钥,索引,外键。一旦创建了所需的表,您可以通过select / insert移动数据(如果表相对较小)或使用bcp实用程序将表转储到磁盘然后将其加载到第二个数据库中(更快但更多工作将其转换为工作正常)

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

答案 1 :(得分:0)

您可以这样做:

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中完成......