2017-01-25 2 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, но во время цикла я буду делать вставки в каждую таблицу. Я предполагаю, что нет никакого способа обойти инструкции вставки для каждой таблицы, что хорошо, но как я могу присвоить значения из вашего списка записей значениям в инструкции insert динамически? – HMan06

+0

@ HMan06: Вы вставляете только определенные поля из каждой таблицы или каждое поле из каждой таблицы? –

+0

Я думал о том, чтобы делать каждое поле из каждого стола, как мне кажется, это проще. В любом случае это будет работать, и я собираюсь очистить данные после их вставки в БД. – HMan06

Смежные вопросы