我正在努力将数据从DBF文件从UNC推送到sql server DB。大约有50个DBF文件,所有这些文件都有不同的模式。现在我知道我可以创建一个程序并列出所有50个表和所有50个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()
答案 0 :(得分: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)