Python 该函数不适用于所有表
我通过从Access到Firebird的数据传输编写了以下代码Python 该函数不适用于所有表,python,sql,database,ms-access,firebird,Python,Sql,Database,Ms Access,Firebird,我通过从Access到Firebird的数据传输编写了以下代码 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_n
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)
在主程序中调用这些函数
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();
由于填写了“客户”表,因此未填写员工(Northwind数据库)。为什么?
以下是文本输出(sql查询插入)
在ibexpert中尝试执行请求时的注意事项
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', '')
我收到
can't format message 13:198 -- message file C:\Windows\firebird.msg not found.
arithmetic exception, numeric overflow, or string truncation.
string right truncation.
我还有一个问题,是从哪里来的
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/#', 'Принят в компанию в качестве сотрудника отдела сбыта, затем назначен начальником отдела сбыта, в настоящее время занимает должность вице-президента по продажам.', '')
有一条线
'http://northwindtraders.com#http://northwindtraders.com/#'
而不是
'http://northwindtraders.com'.
string right truncation
表示您试图插入一个对列来说太长的字符串
'http://northwindtraders.com'.