2016-11-11 2 views
0

Wie kann ich sehen, wie viele Zeilen tatsächlich eingefügt wurden?Wie viele Zeilen eingefügt, nicht Zeilen ausgeführt

engine_str = 'mysql+mysqlconnector://root:[email protected]/mydb' 
engine = sqlalchemy.create_engine(engine_str, echo=False, encoding='utf-8') 
connection = engine.connect() 
query = "INSERT INTO TEST(a,b,c)VALUES(1,2,3) ON DUPLICATE KEY UPDATE B = VALUES(B), C = VALUES(C)" 
try: 
    connection.execute(query) 
except Exception as e: 
    print(e) 

SQLALCHEMY druckt nur diese ID aus.

<sqlalchemy.engine.result.ResultProxy object at 0x0000000007769E80> 

P.S Diese Frage bezieht sich auf Zeileneinfügung, nicht Zeilenausführung. Wenn Sie also rowcount verwenden, wird angezeigt, wie oft die Abfrage ausgeführt wurde.

Umformulierung meiner Frage: Gibt es eine Möglichkeit zu sehen, wie viele Datensätze vs vs aktualisiert wurden? Im Idealfall möchte ich die Primärschlüssel wissen, die aktualisiert wurden.

+0

@Barmar Wenn doppelte gefunden wird es nicht den Wert einfügt. Ich möchte wissen, wie viele Werte eingefügt werden. Vielen Dank. – r0xette

+0

Ist es nicht das Gleiche? Ich kann nicht wirklich sagen, was deine Sätze bedeuten, es gibt keine "Zeilenausführung". –

+0

@ivan_pozdeev: Vielleicht möchte ich fragen, ob es einen Weg gibt zu sehen, welche und wie viele Datensätze tatsächlich aktualisiert wurden. Umformuliert meine Frage. – r0xette

Antwort

0

ResultProxy.rowcount zeigt Ihnen die Anzahl der Zeilen, die von der Abfrage betroffen sind.

Zum Beispiel:

>> r1 = connection.execute("INSERT INTO table (id, food, is_tasty) VALUES (1, 'apple', 't'), (2, 'broccoli', 'f'), (3, 'celery', 'f')") 
>> print r1.rowcount 
3 

Dies auch für andere Anfragen funktioniert:

>> r2 = connection.execute("UPDATE table SET is_tasty = 't' WHERE is_tasty = 'f'") 
>> print r2.rowcount 
2 

>> r3 = connection.execute("DELETE FROM table WHERE food = 'celery'") 
>> print r3.rowcount 
1 

>> r4 = connection.execute("SELECT * FROM table") 
>> print r4.rowcount 
2 
+0

Zeilenanzahl gibt an, wie oft die Abfrage ausgeführt wurde und nicht der Datensatz eingefügt wurde. Ich habe es zum ersten Mal ausgeführt, es hat 96 für 96 Reihen ausgegeben, die eingesetzt wurden. Zum zweiten Mal sollte es 0 geben, da die Daten aufgrund eines doppelten Schlüssels nicht eingefügt wurden. Aber es Stills zeigte 96. 'records_inserted = 0 Versuch: r2 = Connection.Execute (Abfrage) rows_inserted + = r2.rowcount ' – r0xette

+0

@ r0xette Sie haben 'ON DUPLICATE KEY UPDATE' so, wenn Sie einfügen das gleiche Set ein zweites Mal, alle vorhandenen Datensätze werden ersetzt. Der Zähler ist korrekt. –

+0

@ivan_pozdeev Das habe ich mir gedacht. Danke für die Bestätigung. Jetzt gibt es eine Möglichkeit, die Anzahl der Datensätze zu finden, die vs vs aktualisiert eingefügt werden? – r0xette

Verwandte Themen