2017-01-11 72 views
0

假設我有my_table在SQL Server這樣的:轉義字符pypyodbc

CREATE TABLE my_table 
    (col1 VARCHAR(100), 
    col2 VARCHAR(100), 
    col3 INT) 

我試圖插入一些記錄,以使用Python 3.5和pypyodbc庫表,如下圖所示:

import pypyodbc 
connection = pypyodbc.connect('Driver={SQL Server};' 'Server=12.3.456.789.0123;' 'Database=mydb;' 'uid=me;pwd=mypwd') 
cursor= connection.cursor() 
data = [{'p1': "I'm hungry", 'p2': "text for col2", 'p3': '1234'}] 
for dd in data: 
    insert_sql = "INSERT INTO my_table (col1,col2,col3) VALUES (%s, %s, %s)" 
    cursor.execute(insert_sql, (dd['p1'], dd['p2'], dd['p3'])) 

但是運行上面的代碼時,它返回:

pypyodbc.ProgrammingError: ('HY000', 'The SQL contains 0 parameter markers, but 3 parameters were supplied') 

我不知道我做錯了什麼。如果有人能幫我解決這個問題,我將非常感謝幫助!

回答

1

這裏的問題是你正在使用%s佔位符,如在Python或其他編程語言。但pypyodbc使用?作爲佔位符(參數標記)。只需用%替換%s,你的代碼就可以正常工作。

import pypyodbc 
connection = pypyodbc.connect('Driver={SQL Server};' 'Server=12.3.456.789.0123;' 'Database=mydb;' 'uid=BenchmarkingUS;pwd=mypwd') 
cursor= connection.cursor() 
data = [{'p1': "I'm hungry", 'p2': "text for col2", 'p3': 1234}] 
for dd in data: 
    insert_sql = "INSERT INTO phyo_test (col1,col2,col3) VALUES (?, ?, ?)" 
    cursor.execute(insert_sql, (dd['p1'], dd['p2'], dd['p3'])) 
cursor.commit() 

注意:你正在設置p3的值爲字符串'1234',它不會給出錯誤。但最好將其更改爲int 1234,以防止數據類型錯誤。

+0

謝謝!我沒有意識到'pypyodbc'會使用'?'(Python標準字符串格式使用'%'時會出現一些意想不到的情況)。這解決了這個問題。 :) – user1330974