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

时间:2017-01-25 19:01:18

标签: 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 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 个答案:

答案 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)