有没有人知道一个好的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.')
答案 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中完成......