簡體   English   中英

使用 Python 在 SQL Server 中將表從一個數據庫復制到另一個數據庫

[英]Copy tables from one database to another in SQL Server, using Python

有誰知道一個好的 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.')

實際上,SQLAlchemy是一個很好的工具,可用於在第二個數據庫中創建相同的表:

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

此方法還將產生正確的鍵,索引,外鍵。 一旦創建了所需的表,就可以通過選擇/插入(如果表相對較小)來移動數據,或者使用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)

但這可能會非常慢。 使用SQL Server工具來完成這項工作。

考慮使用sp_addlinkedserver過程將一個SQL Server鏈接到另一個。 之后,您可以執行:

SELECT * INTO server_name...table_name FROM table_name

用於db1數據庫中的所有表。

PS這也可以在Python + SQLAlchemy中完成...

MUPSAT 我嘗試了您的技術來復制 sql server 數據庫,但這僅適用於一個表,如果我想創建整個數據庫的表,那么表的問題序列會發生,就像正在創建訂單表但它引用另一個表是尚未創建它會給我一個錯誤,因此任何避免這種情況的技術都可以創建數據庫的完整副本及其密鑰和其他約束

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM