9

I am trying to insert data to the sql server table using following code,

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()

Its giving me the following error while executing,

   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')

I have checked the syntax for the insert statement its correct. So what causes this error?

7 Answers 7

12
cursor.execute("INSERT INTO mytable(name,address) VALUES (?,?)",('thavasi','mumbai'))

use ? instead of % in pyodbc module

Sign up to request clarification or add additional context in comments.

Comments

6

This worked for me.

cursor.execute("INSERT INTO tablename(field1,field2) VALUES(?,?) ", (data1,data2))

Comments

3

This works with SQL Server 2012 and later and integrated security

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()

Comments

0

You forgot the % sign before the values also the %s must be in inverted commas

try this:

cursor.execute('INSERT INTO mytable(name,address) VALUES ("%s","%s")',% ('thavasi','mumbai'))

Comments

0

try this:

a1 = row[0]
a2 = row[1]
valores = (a1, a2)

cursor2.execute('INSERT INTO [CENTRAL_ALARM].[dbo].[EEE](E3TimeStamp, CaptacaoSemAgua) VALUES (?,?)', valores)

Comments

-1

string formatting done here is wrong. Try this

cursor.execute("INSERT INTO mytable(name,address) VALUES (%s,%s)" %('thavasi','mumbai'))

Look into http://www.diveintopython.net/native_data_types/formatting_strings.html

Comments

-1

If are using placeholders in a string, you need to use % operator in favor of using a parameterlist with ,. so your call should look like:

   cursor.execute("INSERT INTO mytable(name,address) VALUES (%s,%s)" %('thavasi','mumbai'))

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.