2016-05-03 4 views
0

Ich benutze Django cursor.execememany für eine Weile jetzt und ich wollte etwas cleading tun.Django cursor.executemany Parameter

Auf dieser Stackoverflow-Seite habe ich gelesen, dass es eine schlechte Idee ist, den String-Formatierungsoperator zu verwenden und ein Fragezeichen zu verwenden. How to use variables in SQL statement in Python?

Jedoch, wenn ich diese verwenden in meinem Programm bekomme ich einen Fehler:

TypeError: not all arguments converted during string formatting 

Dies ist der Code, den ich schrieb:

from django.db import connection 

values = ((1, "john"), (2, "robert"), (3, "angela")) 

cursor = connection.cursor() 
query = "REPLACE INTO names (id, name) VALUES (?, ?)" 
cursor.executemany(query, values) 

Wenn ich nur ersetzen, die ? mit %s es funktioniert wie erwartet.

Eine andere Sache (die mich begann zu suchen) ist, dass PyCharm mir einen Fehler gibt, wenn Sie %s verwenden.

Dies ist nicht das Hauptproblem, aber ich bin mir nicht sicher, ob dies einen Unterschied machen könnte.

Was ich bin mit

  • Python 2.7
  • Django 1.4
  • MySql

Antwort

2

When I only replace the ? with %s it works as expected.

Der ? Platzhalter für SQLite nur verwendet wird:

Put ? as a placeholder wherever you want to use a value, and then provide a tuple of values as the second argument to the cursor’s execute() method. (Other database modules may use a different placeholder, such as %s or :1 .)

MySQL-Treiber erwarten %s als Abfrageparameter Platzhalter zu sehen:

query = "REPLACE INTO names (id, name) VALUES (%s, %s)" 
cursor.executemany(query, values) 

Another thing (that got me started searching) is that PyCharm is giving me an error when using %s.

PyCharm erteilt keine Warnungen an meinem Ende. Sie haben haben wahrscheinlich etwas anderes:

enter image description here

+0

Ich wollte nur Dinge bekommen aufgeräumt da PyCharm einen Fehler geben, wenn die '% s' Platzhalter mit –

+0

@JohanVergeer ja, sicher, um das zu bekommen. Vielen Dank. – alecxe

+0

@JohanVergeer okay, aktualisiert mit dem, was an meinem Ende passiert. Ich hoffe, das hilft. – alecxe

Verwandte Themen