SQL IN-operator verwenden pyodbc-und SQL-Server

Ich bin mit pyodbc-Abfrage auf eine SQL-Server-Datenbank

import datetime
import pyodbc    
conn = pyodbc.connect("Driver={SQL Server};Server='dbserver',Database='db',
                       TrustedConnection=Yes")
cursor = conn.cursor()
ratings = ("PG-13", "PG", "G")
st_dt = datetime(2010, 1, 1)
end_dt = datetime(2010, 12, 31)
cursor.execute("""Select title, director, producer From movies 
                Where rating In ? And release_dt Between ? And ?""", 
                ratings, str(st_dt), str(end_dt))

aber erhalte die Fehlermeldung unten. Hat das Tupel parameter müssen in einer anderen Weise behandelt? Gibt es einen besseren Weg, um die Struktur dieser Abfrage?

('42000', "[42000] [Microsoft][ODBC SQL Server Driver][SQL Server]Line 9: 
  Incorrect syntax near '@P1'. (170) (SQLExecDirectW); 
  [42000] [Microsoft][ODBC SQL Server Driver][SQL Server]
  Statement(s) could not be prepared. (8180)")

UPDATE:

War ich in der Lage, diese Abfrage, um die Arbeit mit der string-Formatierung operator, die nicht ideal ist, so stellt es die Sicherheit betrifft.

import datetime
import pyodbc    
conn = pyodbc.connect("Driver={SQL Server};Server='dbserver',Database='db',
                       TrustedConnection=Yes")
cursor = conn.cursor()
ratings = ("PG-13", "PG", "G")
st_dt = datetime(2010, 1, 1)
end_dt = datetime(2010, 12, 31)
cursor.execute("""Select title, director, producer From movies 
                Where rating In %s And release_dt Between '%s' And '%s'""" % 
                (ratings, st_dt, end_dt))
InformationsquelleAutor user338714 | 2011-01-27
Schreibe einen Kommentar