Я написал следующий код по переносу данных из Access в Firebird
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41.
def getFirebirdFieldNames(firebird_cursor, tablename):
firebird_cursor.execute('select rdb$field_name from rdb$relation_fields where rdb$relation_name=\'%s\' order by rdb$field_position' % (tablename,))
field_names = list()
for c in firebird_cursor.fetchall():
field_names.append(c[0])
return field_names
def SelectFromAccessTable(tablename):
return 'select * from [' + tablename+']'
def InsertToFirebirdTable(tablename, row):
values=''
values=values.encode('cp1251', 'replace')
for i in range(len(row)):
if (i!=len(row)-1):
if type(row[i])==int:
temp=str(row[i])
else:
if type(row[i])==decimal.Decimal:
temp=str(row[i])
else:
temp='\'%s\'' % (row[i],)
values+=temp+', '
else:
if type(row[i])==int:
temp=str(row[i])
else:
if type(row[i])==decimal.Decimal:
temp=str(row[i])
else:
temp='\'%s\'' % (row[i],)
values+=temp
return 'insert into '+tablename+' values ('+values+')'
def AccessToFirebird(accesstablename, firebirdtablename, accesscursor, firebirdcursor):
SelectSql=SelectFromAccessTable(accesstablename)
for row in accesscursor.execute(SelectSql):
InsertSql=InsertToFirebirdTable(firebirdtablename, row)
InsertSql=InsertSql
print InsertSql
firebirdcursor.execute(InsertSql)
В основной программе происходит вызов этих функций
1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13.
conAcc = pyodbc.connect('DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=D:\ThirdTask\Northwind.accdb')
SqlAccess=conAcc.cursor();
conn.begin()
cur=conn.cursor()
sql.AccessToFirebird('Customers', 'CLIENTS', SqlAccess, cur)
conn.commit()
conn.begin()
cur=conn.cursor()
sql.AccessToFirebird('Сотрудники', 'EMPLOYEES', SqlAccess, cur)
conn.commit()
conAcc.commit()
conn.close()
conAcc.close();
В результате заполнилась таблица CLIENTS, а EMPLOYEES нет(база данных Борей). Почему?
Привожу текст вывода (sql-запросы вставки)
1. 2. 3. 4. 5. 6. 7. 8. 9.
insert into EMPLOYEES values (1, 'Борей', 'Ильина', 'Юлия', 'julia@northwindtraders.com', 'Сотрудник отдела сбыта', '(123)555-0100', '(123)555-0102', 'None', '(123)555-0103', '1-й проспект, д. 12', 'Сочи', '(нет)', '999999', 'Россия', '#http://northwindtraders.com#', 'None', '')
insert into EMPLOYEES values (2, 'Борей', 'Гладких', 'Андрей', 'andrew@northwindtraders.com', 'Вице-президент', '(123) 555-0100', '(123) 555-0102', 'None', '(123) 555-0103', '2-й проспект, д. 12', 'Томск', '(нет)', '999999', 'Россия', 'http://northwindtraders.com#http://northwindtraders.com/#', 'Принят в компанию в качестве сотрудника отдела сбыта, затем назначен начальником отдела сбыта, в настоящее время занимает должность вице-президента по продажам.', '')
insert into EMPLOYEES values (3, 'Борей', 'Куликов', 'Евгений', 'evgeny@northwindtraders.com', 'Сотрудник отдела сбыта', '(123) 555-0100', '(123) 555-0102', 'None', '(123) 555-0103', '3-й проспект, д. 12', 'Псков', '(нет)', '999999', 'Россия', 'http://northwindtraders.com#http://northwindtraders.com/#', 'Прошел стажировку в отделе сбыта, в настоящее время является штатным сотрудником.', '')
insert into EMPLOYEES values (4, 'Борей', 'Сергиенко', 'Мария', 'mariya@northwindtraders.com', 'Сотрудник отдела сбыта', '(123) 555-0100', '(123) 555-0102', 'None', '(123) 555-0103', '4-й проспект, д. 12', 'Самара', '(нет)', '999999', 'Россия', 'http://northwindtraders.com#http://northwindtraders.com/#', 'None', '')
insert into EMPLOYEES values (5, 'Борей', 'Новиков', 'Николай', 'nikolay@northwindtraders.com', 'Начальник отдела сбыта', '(123) 555-0100', '(123) 555-0102', 'None', '(123) 555-0103', '5-й проспект, д. 12', 'Сочи', '(нет)', '999999', 'Россия', 'http://northwindtraders.com#http://northwindtraders.com/#', 'Принят в компанию в качестве сотрудника отдела сбыта, затем назначен начальником отдела сбыта. Свободно владеет французским языком.', '')
insert into EMPLOYEES values (6, 'Борей', 'Корепин', 'Вадим', 'vadim@northwindtraders.com', 'Сотрудник отдела сбыта', '(123) 555-0100', '(123) 555-0102', 'None', '(123) 555-0103', '6-й проспект, д. 12', 'Псков', '(нет)', '999999', 'Россия', 'http://northwindtraders.com#http://northwindtraders.com/#', 'Свободно владеет японским языком, читает и пишеть на французском, португальском и испанском.', '')
insert into EMPLOYEES values (7, 'Борей', 'Климов', 'Сергей', 'sergey@northwindtraders.com', 'Сотрудник отдела сбыта', '(123) 555-0100', '(123) 555-0102', 'None', '(123) 555-0103', '7-й проспект, д. 12', 'Сочи', '(нет)', '999999', 'Россия', 'http://northwindtraders.com#http://northwindtraders.com/#', 'None', '')
insert into EMPLOYEES values (8, 'Борей', 'Ожогина', 'Инна', 'inna@northwindtraders.com', 'Координатор продаж', '(123) 555-0100', '(123) 555-0102', 'None', '(123) 555-0103', '8-й проспект, д. 12', 'Псков', '(нет)', '999999', 'Россия', 'http://northwindtraders.com#http://northwindtraders.com/#', 'Читает и пишет по-французски.', '')
insert into EMPLOYEES values (9, 'Борей', 'Попкова', 'Дарья', 'darya@northwindtraders.com', 'Сотрудник отдела сбыта', '(123) 555-0100', '(123) 555-0102', 'None', '(123) 555-0103', '9-я улица, д.12', 'Сочи', '(нет)', '999999', 'Россия', 'http://northwindtraders.com#http://northwindtraders.com/#', 'Свободно владеет французским и немецким языком.', '')
P.S. При попытки выполнить запрос
1.
insert into EMPLOYEES values (1, 'Борей', 'Ильина', 'Юлия', 'julia@northwindtraders.com', 'Сотрудник отдела сбыта', '(123)555-0100', '(123)555-0102', 'None', '(123)555-0103', '1-й проспект, д. 12', 'Сочи', '(нет)', '999999', 'Россия', '#http://northwindtraders.com#', 'None', '')
в ibexpert выдает
1. 2. 3.
can't format message 13:198 -- message file C:\Windows\firebird.msg not found.
arithmetic exception, numeric overflow, or string truncation.
string right truncation.
Также у меня возник вопрос откуда в
1.
insert into EMPLOYEES values (2, 'Борей', 'Гладких', 'Андрей', 'andrew@northwindtraders.com', 'Вице-президент', '(123) 555-0100', '(123) 555-0102', 'None', '(123) 555-0103', '2-й проспект, д. 12', 'Томск', '(нет)', '999999', 'Россия', 'http://northwindtraders.com#http://northwindtraders.com/#', 'Принят в компанию в качестве сотрудника отдела сбыта, затем назначен начальником отдела сбыта, в настоящее время занимает должность вице-президента по продажам.', '')
возникла строка
1.
'http://northwindtraders.com#http://northwindtraders.com/#'
а не
1.
'http://northwindtraders.com'.
Модератор:
vlad52 , не забываем собственноручно в теме обсуждения указывать язык программирования!
|