4
votes

simply put i am trying to make a sql database table and input data into it. I have it working in a simpler way, but when I put it into my script it results in this error. I'm hoping its something simple I missed. Any help/advice would be greatly appreciated.

conn = sqlite3.connect('Data1.db')

c = conn.cursor()

# Create table
c.execute('''CREATE TABLE Data_Output6
         (date text, output6MV real)''') 

Averages_norm = []

for i, x in enumerate(Averages):
    Averages_norm.append(x*output_factor)
    c.execute("INSERT INTO Data_Output6 VALUES (%r,%r)" %(xdates[i],Averages_norm[-1]))
conn.commit()

results in the error:

57     for i, x in enumerate(Averages):
58         Averages_norm.append(x*output_factor)
---> 59         c.execute("INSERT INTO Data_Output6 VALUES (%r,%r)"%(xdates[i],Averages_norm[-1]))
60     conn.commit()
61 

OperationalError: near "(": syntax error

1
So what data do you have in xdates? - Martijn Pieters♦
Also, why are you using string interpolation instead of SQL parameters? - Martijn Pieters♦
Try printing the statement before executing it. I'm sure you'll immediately spot the error. - Andrea Corbellini
You're inviting Booby Tables to tea... bobby-tables.com - LexyStardust

1 Answers

7
votes

Simply put, let the DB API do that formatting:

c.execute("INSERT INTO Data_Output6 VALUES (?, ?)", (xdates[i], Averages_norm[-1]))

And refer to the documentation https://docs.python.org/2/library/sqlite3.html where is mentioned:

Instead, use the DB-API’s parameter substitution.