在这里,我想增加字段计数,然后选择一个原子操作的计数结果。
代码是:
sql = ("update user_cout set count = count+1 "
"where username=%s")
cursor = connection.cursor()
cursor.execute(sql, (username, ))
cursor.execute("select count from user_count "
"where username=%s", (username, ))
有什么推荐方法吗?
您需要在事务中执行UPDATE
和SELECT
(即不自动提交的语句):
connection.autocommit(0);
然后可以执行现有语句并将它们显式提交到数据库:
connection.commit();
请注意,要实现原子性,user_count
表必须使用事务存储引擎(例如 InnoDB)。
>@linbo,您可以在数据库中创建一个函数/过程(在此处查看如何执行此操作),然后在代码中仅运行一次调用:
sql = ("SELECT MY_CUSTOM_FUNC(%s)")
cursor = connection.cursor()
cursor.execute(sql, (username, ))
使用此方法有很多优点:
- 你集中你的逻辑,它可以从你的应用程序中的许多地方调用;
- 更少的代码;
- MySQL 默认在函数中使用原子性,一旦它是数据库的简单操作;
我希望它有所帮助!
你可以这样做:
cursor.execute("UPDATE tbl_name SET pos = @next_pos := pos + 1 WHERE some_id = %s; SELECT @next_pos;", (12345, ))
cursor.nextset()
result = cursor.fetchone()
然后result[0]
将包含递增的值。