2016-11-11 65 views
0

如何查看實際插入的行數?插入了多少行而不是行執行

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只是打印出這個ID。

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

P.S這個問題是關於行插入而不是行執行。所以如果你使用rowcount,它會顯示查詢執行的次數。

改寫我的問題:有什麼方法可以查看有多少條記錄被插入vs更新?理想情況下,我想知道已更新的主鍵。

+0

@Barmar如果發現重複它不插入值。我想知道插入了多少個值。謝謝。 – r0xette

+0

這不是一回事嗎?我無法真正說出你的短語的含義,沒有「行處理」這樣的事情。 –

+0

@ivan_pozdeev:可能是我試圖問,如果有辦法看到哪些和有多少記錄實際更新。改說我的問題。 – r0xette

回答

0

ResultProxy.rowcount將向您顯示查詢所影響的行數。

例如:

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

這適用於其他查詢,以及:

>> 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

行計數表示查詢已執行多少次而不是插入的記錄。我第一次運行它,發出了96行,插入了96行。第二次它應該給0,因爲數據未被插入,因爲重複密鑰。但它劇照顯示,96 'records_inserted = 0 嘗試: R2 = connection.execute(查詢) rows_inserted + = r2.rowcount ' – r0xette

+0

@ r0xette你'對重複KEY UPDATE'所以如果你插入第二次同樣設置,所有現有記錄被替換。櫃檯是正確的。 –

+0

@ivan_pozdeev這就是我的想法。感謝您的確認。現在有什麼辦法可以找到那些只有插入vs更新的記錄的計數嗎? – r0xette