ist hier ein Stück meines Python-Code und die probe_id ist ein String:mysqldb Auto Add '' zu% s
sql = "select flow_id from t_static_flow where probe_id = %s"
cursor = connection.cursor()
cursor.execute(sql, (probe_id,))
Es funktioniert gut, und doch, wenn ich die SQL oben ändern
sql = "select flow_id from t_static_flow where probe_id = '%s'"
Es gibt mir solche Fehler Infos:
(1064: „Sie haben einen Fehler in der SQL-Syntax, kontrollieren das Handbuch, die für die richtige Syntax zu Ihrer MySQL-Server-Version entspricht verwenden in der Nähe von‚123‘‚‘ in Zeile 1 ")
Wenn ich das '' umgebende% s hinzufüge, scheitert es. Aber warum ?
und ich schalte die mysql general_log um zu sehen, die sql ausgeführt werden.
2017-07-19T13:21:37.107960Z 85 Query select flow_id from t_static_flow where probe_id = '123'
Es ist meine erste Code sql log, die gut funktioniert.
aber ich denke, in den ersten Code der letzte SQL sein sollte:
select flow_id from t_static_flow where probe_id = 123
wie es funktioniert?
Ich lese den MySQLdb Python-Code. in der Funktion ausführen:
if args is not None:
if isinstance(args, dict):
query = query % dict((key, db.literal(item))
for key, item in args.iteritems())
else:
query = query % tuple([db.literal(item) for item in args])
Ich denke, es tut nicht die zusätzliche Arbeit sagte wie @money.
Warum denken Sie, dass die letzte Abfrage sein sollte: Wählen Sie flow_id aus t_static_flow where Probe_id = 123. Probe_id ist ein String-Feld, dann sollte es von Anführungszeichen umgeben werden. – money
aber wie zu erklären, dass es einen Fehler gibt, wenn ich das% s durch Anführungszeichen in sql wie dieses sql = "wähle flow_id von t_static_flow wo probe_id = '% s'"? – GuangshengZuo
Ich denke cursor.execute (sql, (Probe_ID,)) nur Zeichenfolge entkommen und formatieren Zeichenfolge mit dem "Select flow_id von t_static_flow wo Probe_id =% s", und die% s ist nicht umgeben von Quote. – GuangshengZuo