2017-08-30 2 views
1
#endcding=utf-8 
import MySQLdb 
conn = MySQLdb.connect{ 
    host='localhost' 
    port=3306, 
    user='root', 
    passwd='admin 
    db='db01', 
    charset='utf8 
    )    
cur = conn.cursor() 
count = cur.execute("select * from t_r_def_audit") 
results = cur.fetchmany(count) 
provcode = cur.execute("select * from t_r_params where 
param_tag='PROVINCE_CODE' and param_code not in(1,95,99)") 
provResults = cur.fetchmany(provcode) 
i = 0 
sql = "insert into ti_r_audit values({0},{1},{2},{3})" 
values = "[" 
for result in results: 
i = i+1 
prev = result[8] 
audit_id = result[0] 
if(prev == "1"): 
    prov = 31 
    for index in range(prov): 
     values =values + "("+str(i)+","+audit_id+",'"+provResults[index] 
    [0]+"',0)," 
     i = i+1 
elif prev=="0": 
    values =values + "("+str(i)+","+audit_id+",'"+provResults[31][0]+"',0)," 
values = values + "]" 
cur.executemany(sql,values) 
cur.close 
conn.commit() 
conn.close() 

manuell vernäht die Parameter von SQL, mit executableemany Implementierung von SQL, aber nach der Implementierung des Skripts wird Der Fehler gemeldet wird wie folgtpython2.7 Typeerror: nicht alle während Zeichenfolge konvertiert Argumente Formatierung

λ python audit.py 
Traceback (most recent call last): 
File "audit.py", line 34, in <module> 
cur.executemany(sql,values) 
File "C:\Python27\lib\site-packages\MySQLdb\cursors.py", line 255, in 
executemany 
self.errorhandler(self, TypeError, msg) 
File "C:\Python27\lib\site-packages\MySQLdb\connections.py", line 36, in 
defaulterrorhandler 
raise errorclass, errorvalue 
TypeError: not all arguments converted during string formatting 

schreibt manuelle Parameter ihrer eigenen und hat keine Fehler, was darauf hinweist, dass das Skript sollte kein Problem sein, das Problem in dem Splicing-sQL-Parameter sein kann, aber nicht finden, wo es ein Problem

+1

; Sehen Sie sich das Syntax-Highlight an. Bitte schneiden Sie es auf eine [mcve] – jonrsharpe

Antwort

1

Y unser Code ist ein Chaos, aber die Linie

sql = "insert into ti_r_audit values({0},{1},{2},{3})" 

Bedürfnisse schließlich als etwas entlang der Linien von

sql.format('first', 'second', 'third', 'forth') 

so sicherzustellen, dass Ihre Liste values enthält 4 Werte aufgerufen werden, wenn Sie anrufen:

cur.executemany(sql,values) 

sonst werden Sie den Fehler sehen:

TypeError: not all arguments converted during string formatting 

Update:

Zum Debuggen Sie die Zeile einfügen:

print(sql.format(*values)) 

, bevor Sie den Code, den Sie geschrieben haben, ist eindeutig gebrochen laufen die Linie

cur.executemany(sql,values) 
+0

Entschuldigung, der Code ist unvollständig. Meine Parameter sind Teil des Spleißens, Werte sind Teil der Parameter, ich drucke aus, es sind in der Tat vier Parameter pro Zeile – Cooper

+0

Überprüfen Sie mein Update und stellen Sie sicher, dass alle Ihre SQL-Anweisungen intakt sind – AK47

+0

Oder gegeben, Drucken die Menge "in ti_r_audit-Werte einfügen ([, (, 1 ,,)" – Cooper

Verwandte Themen