powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [Python] Функция работает не на всех таблицах
2 сообщений из 2, страница 1 из 1
[Python] Функция работает не на всех таблицах
    #38029673
vlad52
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я написал следующий код по переносу данных из Access в Firebird
Код: python
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)


В основной программе происходит вызов этих функций
Код: python
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-запросы вставки)
Код: python
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. При попытки выполнить запрос
Код: python
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 выдает
Код: python
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.


Также у меня возник вопрос откуда в
Код: python
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/#', 'Принят в компанию в качестве сотрудника отдела сбыта, затем назначен начальником отдела сбыта, в настоящее время занимает должность вице-президента по продажам.', '')


возникла строка
Код: python
1.
    'http://northwindtraders.com#http://northwindtraders.com/#'


а не
Код: python
1.
    'http://northwindtraders.com'.



Модератор:
vlad52 , не забываем собственноручно в теме обсуждения указывать язык программирования!
...
Рейтинг: 0 / 0
[Python] Функция работает не на всех таблицах
    #38029687
vkle
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vlad52Также у меня возник вопрос откуда в
[ ... пропущено... ]

возникла строка
Код: python
1.
    'http://northwindtraders.com#http://northwindtraders.com/#'

Вероятно, в Аксе это поле было гиперссылкой. По крайней мере, формат хранения данных очень уж похож.
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [Python] Функция работает не на всех таблицах
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]