我正在尝试使用以下代码将数据插入到sql server表中,
import pyodbc
user='sa'
password='PC#1234'
database='climate'
port='1433'
TDS_Version='8.0'
server='192.168.1.103'
driver='FreeTDS'
con_string='UID=%s;PWD=%s;DATABASE=%s;PORT=%s;TDS=%s;SERVER=%s;driver=%s' % (user,password, database,port,TDS_Version,server,driver)
cnxn=pyodbc.connect(con_string)
cursor=cnxn.cursor()
cursor.execute("INSERT INTO mytable(name,address) VALUES (%s,%s)",('thavasi','mumbai'))
cnxn.commit()
执行时会给我以下错误,
Traceback (most recent call last):
File "sql.py", line 26, in <module>
cursor.execute("INSERT INTO mytable(name,address) VALUES (%s,%s)",('thavasi','mumbai'))
pyodbc.ProgrammingError: ('The SQL contains 0 parameter markers, but 2 parameters were supplied', 'HY000')
我已经检查了insert语句的语法是否正确。是什么导致了这个错误?
答案 0 :(得分:4)
cursor.execute("INSERT INTO mytable(name,address) VALUES (?,?)",('thavasi','mumbai'))
在pyodbc模块中使用?而不是%
答案 1 :(得分:2)
这对我有用。
cursor.execute("INSERT INTO tablename(field1,field2) VALUES(?,?) ", (data1,data2))
答案 2 :(得分:1)
这可用于SQL Server 2012及更高版本以及集成的安全性
import pyodbc
conn = pyodbc.connect('Driver={SQL Server Native Client 11.0};'
r'Server=YourServer\YourInstance;'
'Database=YourDatabase;'
'Trusted_Connection=yes;') #integrated security
cursor = conn.cursor()
SQLCommand = ("INSERT INTO PY.PackageTables (PackageName,PackageTables) VALUES (?,?);")
Values = ['Test1','Test3']
#Processing Query
cursor.execute(SQLCommand,Values)
conn.commit()
print("Data Successfully Inserted")
conn.close()
答案 3 :(得分:0)
您忘记%
符号,%s
必须在引号中
试试这个:
cursor.execute('INSERT INTO mytable(name,address)VALUES(“%s”,“%s”)',%('thavasi','mumbai'))
答案 4 :(得分:0)
尝试一下:
a1 = row[0]
a2 = row[1]
valores = (a1, a2)
cursor2.execute('INSERT INTO [CENTRAL_ALARM].[dbo].[EEE](E3TimeStamp, CaptacaoSemAgua) VALUES (?,?)', valores)
答案 5 :(得分:-1)
string
格式化是错误的。试试这个
cursor.execute("INSERT INTO mytable(name,address) VALUES (%s,%s)" %('thavasi','mumbai'))
查看http://www.diveintopython.net/native_data_types/formatting_strings.html
答案 6 :(得分:-1)
如果在字符串中使用占位符,则需要使用%运算符,而使用带有的参数列表,。所以你的电话应该是这样的:
cursor.execute("INSERT INTO mytable(name,address) VALUES (%s,%s)" %('thavasi','mumbai'))