Ich versuche, eine einfache Abfrage von einer Spalte mit dem Namen N_Number in einer MySQL-Tabelle mit dem folgenden Code zu tun:Python MySQLdb Syntaxfehler mit scheinbar korrekter Syntax
from os.path import join, dirname
from dotenv import load_dotenv
import MySQLdb
TABLE_NAME = 'testmaster'
dotenv_path = join(dirname(__file__), '.env')
load_dotenv(dotenv_path) # loads the .env
dbName = os.environ.get('DB_NAME')
mydb = MySQLdb.connect(host=os.environ.get('DB_HOST'), user=os.environ.get('DB_USER'), passwd=os.environ.get('DB_PASS'), db=dbName)
cursor = mydb.cursor()
cursor.execute("SELECT N_NUMBER FROM %s", (TABLE_NAME,))
ich weiterhin die gleiche Traceback jedes Mal bekommen , das ist:
Traceback (most recent call last):
File "updateMaster.py", line 101, in <module>
cursor.execute("SELECT 'N_NUMBER' FROM %s", (TABLE_NAME,))
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/MySQLdb/cursors.py", line 205, in execute
self.errorhandler(self, exc, value)
File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler
raise errorclass, errorvalue
_mysql_exceptions.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''testmaster'' at line 1")
ich habe auch versucht, die Syntax mit pyformat Stil, wie durch die Dokumentation für die .execute() Methode empfohlen, erhielt aber immer noch die gleichen Fehler. Der pyformat Stil sah aus wie:
cursor.execute("SELECT N_NUMBER FROM %(table_name)s", {'table_name':TABLE_NAME})
Wenn ich direkt versuchen, den Tabellennamen in die Befehlsfolge Einfügen den Befehl funktioniert, mir was zu vermuten, dass es etwas mit dem% s zu tun hat. Was läuft falsch?
Sie können keinen Tabellennamen parametrieren: http://stackoverflow.com/questions/15255694/python-mysqldb-execute-table-variable (gleiche gilt auch für Spaltennamen). – alecxe
Vielen Dank! Ich wusste, dass diese Frage wahrscheinlich irgendwo gestellt wurde, aber ich konnte sie nicht finden. – RyMac