Python 将多个DBF文件中的所有数据插入多个表

Python 将多个DBF文件中的所有数据插入多个表,python,python-2.7,pyodbc,dbf,Python,Python 2.7,Pyodbc,Dbf,我正在将数据从DBF文件从UNC推送到sql server DB。大约有50个DBF文件,所有这些文件都具有不同的模式。现在我知道我可以创建一个程序,列出所有50个表和所有50个DBF文件,但这将花费永远的时间。是否有一种方法可以通过某种方式派生DBF字段名来进行插入,而不是遍历每个DBF并键入DBF中的每个字段名?下面是我现在拥有的代码,它在一个DBF文件中插入来自两个字段的记录 import pyodbc from dbfread import DBF # SQL Server Conne

我正在将数据从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()

使用my Manager提供一些有用的提示:

如果要传输所有字段,则需要计算表名、字段名和值;一些例子:

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)

这可能更像是一个一般的python问题,我几乎没有python方面的经验,但在循环过程中,我将对每个表进行插入。我假设没有办法绕过每个表的insert语句,这很好,但我如何将记录列表中的值动态分配给insert语句中的值?@HMan06:您是否只从每个表插入某些字段,或者每一张桌子上的每一个字段?我在考虑每一张桌子上的每一个字段,因为我想这更容易。无论哪种方法都可以,我将在数据插入数据库后清理数据。谢谢!我试试这个!我试图对此进行测试,但遇到了一个问题。显然,我使用的DBF文件有一些预先存在的格式,因此insert尝试插入值,例如u'X31A0UQYB3',u'E',datetime.datetime(2010,9,21,15,34,31999000),datetime.datetime(2010,9,23,13,16,44)
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)