これは主にmysqlの質問だと思います。
私は最近いくつかのPythonコードを継承しました(私は正確にはpythonistaではありません)。2つのクエリを作成し、それらを一度に1つずつデータベースに送信する非常に簡単なコードのようです。
query_1 = "insert into %s SELECT Foo, Bar FROM %s where Type in ('AB','BC') group by Foo;" %(filteredTable, rawTable)
self.connect(self.credentials, query_1)
query_2 = 'insert into %s SELECT a.*, b.Bar FROM %s a left join %s b on a.Foo = b.Foo ;' % (finaltable, filteredTable, otherTable)
self.connect(self.credentials, query_2)
def connect(self, credentials, query):
connection = None
server, user, password, database = credentials
try:
connection = MySQLdb.connect(server, user, password, database, connect_timeout=10)
cursor = connection.cursor()
cursor.execute(query)
result = cursor.fetchall()
except MySQLdb.Error, e:
self.logger.exception('event_description="Error with mysql"')
raise
if connection:
connection.close()
return result
query_2は機能しますが、cursor.execute( "COMMIT;")を追加しない限り、query_1は失敗します。
私は自分のコードでこれを簡単に修正できますが、なぜそうなるのかと呆然とします。一方がコミットなしで成功し、もう一方が失敗するのはなぜですか?