日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

python pymysql cursors_python pymysql cursor的问题

發布時間:2023/12/15 数据库 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python pymysql cursors_python pymysql cursor的问题 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

使用python操作mysql的時候一般都會使用如下語句:

官方示例

import pymysql.cursors

# 連接到數據庫后實際上TCP的連接狀態是ESTABLISHED

connection = pymysql.connect(host='localhost',

user='user',

password='passwd',

db='db',

charset='utf8mb4',

cursorclass=pymysql.cursors.DictCursor)

try:

with connection.cursor() as cursor:

sql = "INSERT INTO `users` (`email`, `password`) VALUES (%s, %s)"

cursor.execute(sql, ('webmaster@python.org', 'very-secret'))

#默認不自動提交事務,所以需要手動提交

connection.commit()

with connection.cursor() as cursor:

sql = "SELECT `id`, `password` FROM `users` WHERE `email`=%s"

cursor.execute(sql, ('webmaster@python.org',))

result = cursor.fetchone()

print(result)

finally:

connection.close()

在這段代碼里,有一個疑惑的點是,我們現在創建了一個連接,但是實例化了多個cursor,我們可不可以使用同一個連接的同一個cursor來重復使用,代碼如下

with connect.cursor() as cursor:

cursor.execute("select * from person limit 1")

print(id(cursor))

data = cursor.fetchone()

print(data)

print("=============")

cursor.execute("select * from person limit 1")

print(id(cursor))

data = cursor.fetchone()

print(data)

上面的代碼,我們執行完了之后發現查詢操作是可以直接使用的,并且不會產生沖突,我們通過打印cursor的地址發現是同一個cursor。

插入操作

with connect.cursor() as cursor:

for id in range(1, 100, 2):

cursor.execute("insert into test(id)values(%d)"%id)

print(id)

id += 1

cursor.execute("insert into test(id)values(%d)"%id)

time.sleep(2)

print(id)

在單進程單線程環境下依然沒有問題

刪除

with connect.cursor() as cursor:

for id in range(100):

# cursor.execute("insert into test(id)values(%d)" % id)

cursor.execute("delete from test where id=%s"%id)

time.sleep(5)

time.sleep(10)

也沒有問題

但是有博客說多進程環境下會出現問題,我一直想重現,但是沒有成功,等以后重現了再來更新。

但是

創建了一個 cursor 以后,建議完成一個事務就 commit 一下,不要一直用它,這樣一直使用,并不會和數據庫完成數據同步,如果操作太多,提交的時候會超時,造成部分數據更新,部分數據丟失,數據不一致且效率低。

并且握著 cursor 期間,數據庫端發生改變,也沒法和客戶端同步。

總結

以上是生活随笔為你收集整理的python pymysql cursors_python pymysql cursor的问题的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。