I can believe fly.

Friday, April 10, 2009

python + sql server

1. 模块选用pyodbc,资料如下:
Home Page:http://code.google.com/p/pyodbc
Documentation:http://code.google.com/p/pyodbc/w/list
Issues/Bugs:http://code.google.com/p/pyodbc/issues/list
Discussion Group:http://groups.google.com/group/pyodbc
Source:http://github.com/mkleehammer/pyodbc

2. 问题
问题:执行cursor_oem.execute("SELECT id FROM list")
出错:
Errors: ('42S02', "[42S02] [Microsoft][ODBC SQL Server Driver][SQL Server]\xb6\x
d4\xcf\xf3\xc3\xfb 'oem_list' \xce\xde\xd0\xa7\xa1\xa3 (208) (SQLExecDirectW)")
原因:表oem_list需要指定所有者才可行
分析:表的所有者是user2,但连接数据库用的是user1,因此估计跟表的所有者有关系!

问题:连接数据库出
错误信息:
Errors: ('22001', '[22001] [Microsoft][ODBC SQL Server Driver][SQL Server]\xbd\x
ab\xbd\xd8\xb6\xcf\xd7\xd6\xb7\xfb\xb4\xae\xbb\xf2\xb6\xfe\xbd\xf8\xd6\xc6\xca\x
fd\xbe\xdd\xa1\xa3 (8152) (SQLExecDirectW); [01000] [Microsoft][ODBC SQL Server
Driver][SQL Server]\xd3\xef\xbe\xe4\xd2\xd1\xd6\xd5\xd6\xb9\xa1\xa3 (3621)')
原因:
执行的sql语句有问题,即服务器: 消息 8152,级别 16,状态 9,行 1
将截断字符串或二进制数据。语句已终止。

问题:在执行insert之前未加入cursor = cnxn.cursor()    
报错:Errors: No results.  Previous SQL was not a query.
查询数据库表,数据已新增. 反过来,如有加入,则信息:
Errors: ('HY010', '[HY010] [Microsoft][ODBC SQL Server Driver]\xba\xaf\xca\xfd\x
d0\xf2\xc1\xd0\xb4\xed\xce\xf3 (0) (SQLFetch)')
原因:可能是sqlserver的一个bug http://support.microsoft.com/kb/257517/en-us/
解决:将cnxn的提交动作移到循环插入数据外
注意:添加前,需要有cursor_oem = cnxn.cursor()  

No comments: