Ich habe Probleme beim Ausführen einer SQL-Anweisung von Python aufgrund des "" in der Auswahl. Ich glaube, ich habe jede Kombination ausprobiert, kann es aber nicht herausfinden. Kannst du mir bitte helfen?

cnxn = pyodbc.connect("DRIVER={Microsoft Access Driver (*.mdb)};DBQ=c:\\python33\salesdb.mdb")
cursor = cnxn.cursor()
v_sql = "SELECT DISTINCT tblSeller.ID, tblSeller.Navn FROM tblResult INNER JOIN tblSeller ON tblResult.SellerID = tblSeller.ID WHERE (((tblSeller.Name)="Robert Smith" ))"
cursor.execute(v_sql)

Das Problem ist das "um Robert Smith in der SQL.

1
Enthuziast 10 Dez. 2013 im 14:32

3 Antworten

Beste Antwort

Sie würden den Anführungszeichen entkommen oder einen anderen Anführungszeichenstil verwenden. Hier würden zum Beispiel einfache Anführungszeichen reichen.

Verwenden einfacher Anführungszeichen:

v_sql = 'SELECT DISTINCT tblSeller.ID, tblSeller.Navn FROM tblResult INNER JOIN tblSeller ON tblResult.SellerID = tblSeller.ID WHERE (((tblSeller.Name)="Robert Smith" ))'

Verwenden von Escape:

v_sql = "SELECT DISTINCT tblSeller.ID, tblSeller.Navn FROM tblResult INNER JOIN tblSeller ON tblResult.SellerID = tblSeller.ID WHERE (((tblSeller.Name)=\"Robert Smith\" ))"

Oder Sie können dreifache Anführungszeichen verwenden (eines von ''' oder """); Diese ermöglichen einfache mehrzeilige Zeichenfolgen, da Zeilenumbrüche zulässig sind und im endgültigen Zeichenfolgenwert enthalten sind:

v_sql = """
SELECT DISTINCT tblSeller.ID, tblSeller.Navn 
FROM tblResult INNER JOIN tblSeller ON tblResult.SellerID = tblSeller.ID
WHERE (((tblSeller.Name)=\"Robert Smith\" ))
"""
2
Martijn Pieters 10 Dez. 2013 im 10:33

Versuchen Sie, mit einfachen Anführungszeichen zu mischen:

v_sql = "SELECT DISTINCT tblSeller.ID, tblSeller.Navn FROM tblResult INNER JOIN tblSeller ON tblResult.SellerID = tblSeller.ID WHERE (((tblSeller.Name)='Robert Smith' ))"

Oder

v_sql = 'SELECT DISTINCT tblSeller.ID, tblSeller.Navn FROM tblResult INNER JOIN tblSeller ON tblResult.SellerID = tblSeller.ID WHERE (((tblSeller.Name)="Robert Smith" ))'

In Python können Zeichenfolgen entweder mit einem doppelten Anführungszeichen " oder einem einfachen Anführungszeichen ' in Anführungszeichen gesetzt werden. Dies ist in diesen Fällen sehr nützlich.

2
RickyA 10 Dez. 2013 im 10:33

In Python können Sie Zeichenfolgen mit ' oder " erstellen, wie andere sagen.

In diesem Fall möchte ich jedoch vorschlagen, PreparedStatement anstelle einer einfachen Abfrage zu verwenden. Solch ein PreparedStatement verwendet ? anstelle von Argumenten und Argumente sind einfach Array:

v_sql = "SELECT DISTINCT tblSeller.ID, tblSeller.Navn FROM tblResult INNER JOIN tblSeller ON tblResult.SellerID = tblSeller.ID WHERE (((tblSeller.Name)=?))"
rs = c.execute(v_sql, ["Robert Smith", ])

PreparedStatements haben viele Vorteile: Sie lassen sich einfacher von Datenbank-Engines analysieren und Abfragepläne zwischenspeichern, sie sind sicher für SQLInjection-Angriffe usw.

2
Michał Niklas 10 Dez. 2013 im 10:48