2016-11-11 11 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を使用すると、クエリが実行された回数が表示されます。

私の質問に言い換えると、更新されたレコードと挿入されたレコードの数を確認する方法はありますか?理想的には、更新された主キーを知りたい。

+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を最初に出した。 2回目は、キーが重複してデータが挿入されなかったため、0にする必要があります。あなたが挿入するので、もしあなたがDUPLICATE KEY UPDATE' ON '持っr0xette @ R2 = connection.execute(クエリ) ROWS_INSERTED + = r2.rowcount ' – r0xette

+0

:しかし、それは96 'records_inserted = 0 試みを示した静止画同じセットをもう一度、すべての既存のレコードが置き換えられます。カウンターは正しいです。 –

+0

@ivan_pozdeevそれは私が思ったことです。それを確認していただきありがとうございます。今は、更新されたレコードと挿入されたレコードの数を調べる方法はありますか? – r0xette

関連する問題