2017-01-25 113 views
0

我正在將DBF文件中的數據從UNC推送到sql服務器數據庫。大約有50個DBF文件,所有這些文件都有不同的模式。現在我知道我可以創建一個程序並列出所有50個表格和全部50個DBF文件,但這將持續下去。有沒有辦法以某種方式派生DBF字段名稱來執行插入操作,而不是通過每個DBF並輸入DBF中的每個字段名稱?這裏是我現在的代碼,它將兩個字段的記錄插入到一​​個DBF文件中。使用將多個DBF文件中的所有數據插入到多個表中

import pyodbc 
from dbfread import DBF 

# SQL Server Connection Test 
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=**********;DATABASE=TEST_DBFIMPORT;UID=test;PWD=test') 
cursor = cnxn.cursor() 
dir = 'E\\Backups\\' 
table = DBF('E:\\Backups\\test.dbf', lowernames=True) 
for record in table.records: 
    rec1 = record['field1'] 
    rec2 = record['field2'] 
    cursor.execute ("insert into tblTest (column1,column2) values(?,?)", rec1, rec2) 
    cnxn.commit() 

回答

1

一些有用的提示我dbf package

import dbf 
import os 

for filename in os.listdir('e:/backups'): 
    with dbf.Table('e:/backups/'+filename) as table: 
     fields = dbf.field_names(table) 
     for record in table: 
      values = list(record) 
      # insert fields, values using odbc 

如果您要轉移的所有領域,那麼你就需要計算的表名,字段名,和值;一些例子:

sql_table = os.path.splitext(filename)[0] 

fields = ','.join(fields) 
place_holders = ','.join(['?'] * len(fields)) 
values = tuple(record) 

sql = "insert into %s (%s) values(%s)" % (sql_table, fields, place_holders) 

curser.execute(sql, *values) 
+0

這可能更多的是一個通用的python問題,我有很少的Python經驗,但在循環期間,我會做插入到每個表中。我假設沒有辦法解決每個表的插入語句,這很好,但是如何動態地將記錄列表中的值分配給插入語句中的值? – HMan06

+0

@ HMan06:你是隻插入每個表中的某些字段還是每個表中的每個字段? –

+0

我正在考慮做每張桌子上的每個字段,因爲我覺得這很容易。無論哪種方式都可以工作,我將在數據插入數據庫後清理數據。 – HMan06

相關問題