我正在編寫一個針對Microsoft SQL Server 2012實例的Python數據庫數據備份腳本。我的目標是能夠輕鬆地將數據庫的數據備份到現有的空模式。我使用pymssql作爲我的數據庫接口。使用fetchall轉換查詢結果類型()
這裏是我有問題的代碼段:
def run_migrate(s_conn, d_conn):
source_cursor = s_conn.cursor()
dest_cursor = d_conn.cursor()
source_cursor.execute("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES order by TABLE_NAME asc")
res_tables = source_cursor.fetchall()
tables = [i[0] for i in res_tables]
for i in range(len(tables)):
query_columns = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '" + str(tables[i]) + "'"
l.log.debug(query_columns)
source_cursor.execute(query_columns)
res_columns = source_cursor.fetchall()
columns = [i[0] for i in res_columns]
query_data = 'SELECT * FROM ' + tables[i]
l.log.debug(query_data)
source_cursor.execute(query_data)
res_results = source_cursor.fetchall()
l.log.info('Extracted ' + str(len(results)) + ' results from ' + tables[i])
我的問題是,當我使用res_results = fetchall()
我回來,看起來像下面的列表:
<class 'list'>: [(Decimal('102'), datetime.datetime(2016, 3, 29, 13, 53, 20, 593000), '1459281200561077E9152BF85FCBC33E6689E9DCB61705985137701459280466827', 'cable summary ', 3600000, 0, None, None, None, None, None, None, 0, 0, None, None, Decimal('333'), Decimal('100'), Decimal('107'), None, None)]
我我期待從這些數據中形成一個參數化的INSERT語句,以針對d_conn.execute()
運行,但是如何在不事先知道每列數據類型以及如何處理它的情況下即時轉換數據類型?
比如我需要轉換列表:
<class 'list'>: [
(Decimal('102'),
datetime.datetime(2016, 3, 29, 13, 53, 20, 593000),
'1459281200561077E9152BF85FCBC33E6689E9DCB61705985137701459280466827',
'cable summary ',
3600000,
0,
None,
None,
None,
None,
None,
None,
0,
0,
None,
None,
Decimal('333'),
Decimal('100'),
Decimal('107'),
None,
None)]
到SQL INSERT語句:
INSERT INTO [ALERT] VALUES
(102
,'2016-03-29 13:53:20.593'
,1
,'cable summary'
,3600000
,0
,NULL
,NULL
,NULL
,NULL
,NULL
,NULL
,0
,0
,NULL
,NULL
,333
,100
,107
,NULL
,NULL)
我希望能夠用我把它當作我的任何數據類型來做到這一點有幾百個表來做到這一點,不想爲每個表寫一個函數。任何幫助表示讚賞。
使用強制和一個ORM,盧克。 sqlalchemy是光明的一面,並支持pymssql。 –