{"id":13132,"date":"2024-03-08T10:48:29","date_gmt":"2024-03-08T02:48:29","guid":{"rendered":"https:\/\/blog.hoyo.idv.tw\/?p=13132"},"modified":"2024-03-14T11:31:58","modified_gmt":"2024-03-14T03:31:58","slug":"python-mysqldb-pymysql-mysql-connector-%e4%b8%89%e7%a8%ae-mysql-%e5%ad%98%e5%8f%96%e6%a8%a1%e7%b5%84%e4%bd%bf%e7%94%a8%e5%b7%ae%e7%95%b0","status":"publish","type":"post","link":"https:\/\/blog.hoyo.idv.tw\/?p=13132","title":{"rendered":"Python - MySQLdb, PyMySQL, MySQL Connectors \u4e09\u7a2e MySQL \u5b58\u53d6\u6a21\u7d44\u4f7f\u7528\u5dee\u7570"},"content":{"rendered":"<p>--<\/p>\n<h2>\u524d\u8a00<\/h2>\n<p>\u76f8\u8f03\u65bc PHP\uff0cPython \u56e0\u70ba\u53ef\u4ee5\u81ea\u7531\u9078\u64c7\u6a21\u7d44\uff0c\u6240\u4ee5\u5c31\u7b97\u662f\u9023\u63a5 MySQL \u8cc7\u6599\u5eab\u4e5f\u6709\u5f88\u591a\u7a2e\u65b9\u5f0f\uff0c\u5728\u6b64\u4f7f\u7528 MySQLdb, pymysql, mysql.connector \u4e09\u7a2e\u6a21\u7d44\u4f86\u6bd4\u8f03\u7a0b\u5f0f\u4ee5\u53ca\u6548\u80fd\u7684\u5dee\u7570\u3002<\/p>\n<p>--<\/p>\n<h2>\u9700\u6c42<\/h2>\n<ul>\n<li>\u56e0\u70ba\u6c92\u6709\u4ea4\u6613\u9700\u6c42\u6240\u4ee5\u8a2d\u5b9a autocommit \u76f4\u63a5\u5c07\u5beb\u5165\u751f\u6548<\/li>\n<li>\u70ba\u4e86\u7a0b\u5f0f\u65b9\u4fbf\u7dad\u8b77\uff0c\u56e0\u6b64 SQL \u90fd\u4f7f\u7528 named placeholders<\/li>\n<li>\u4f7f\u7528\u8ff4\u5708\u65b0\u589e 10000 \u7b46\u8cc7\u6599\u518d\u66f4\u65b0\u8cc7\u6599\u5f8c\u8a08\u7b97\u6240\u9700\u6642\u9593<\/li>\n<\/ul>\n<p>--<\/p>\n<h2>MySQLdb<\/h2>\n<p>\u5b89\u88dd<\/p>\n<pre class=\"lang:default decode:true\">pip3 install mysqlclient<\/pre>\n<p>Python \u7a0b\u5f0f\u78bc<\/p>\n<pre class=\"lang:python decode:true\">import MySQLdb\r\nimport time\r\n\r\ndb = MySQLdb.connect(host=\"192.168.6.121\", user=\"user\", password=\"password\", database=\"database\", autocommit=True)\r\ncursor = db.cursor(MySQLdb.cursors.DictCursor)\r\n\r\nstart_time = time.time()\r\n\r\nfor i in range(0, 10000):\r\n    sql = \" INSERT INTO Room (Game) VALUES ('') \"\r\n    cursor.execute(sql)\r\n\r\n    sql = \" UPDATE Room SET Game=Game+1 WHERE id=%(id)s \"\r\n    cursor.execute(sql, {\r\n        'id': i\r\n    })\r\nprint(time.time() - start_time) # 28.631089210510254\r\n\r\nsql = \" SELECT * FROM Room WHERE id=%(id)s \"\r\ncursor.execute(sql, {\r\n    'id': 1\r\n})\r\nprint(cursor.rowcount)\r\na = cursor.fetchone()\r\nprint(a)<\/pre>\n<p>--<\/p>\n<h2>PyMySQL<\/h2>\n<p>\u5b89\u88dd<\/p>\n<pre class=\"lang:default decode:true\">pip3 install PyMySQL<\/pre>\n<p>Python \u7a0b\u5f0f\u78bc<\/p>\n<pre class=\"lang:default decode:true\">import pymysql\r\nimport time\r\n\r\ndb = pymysql.connect(host=\"192.168.6.121\", user=\"user\", password=\"password\", database=\"database\", autocommit=True)\r\ncursor = db.cursor(pymysql.cursors.DictCursor)\r\n\r\nstart_time = time.time()\r\n\r\nfor i in range(0, 10000):\r\n    sql = \" INSERT INTO Room (Game) VALUES ('') \"\r\n    cursor.execute(sql)\r\n\r\n    sql = \" UPDATE Room SET Game=Game+1 WHERE id=%(id)s \"\r\n    cursor.execute(sql, {\r\n        'id': i\r\n    })\r\nprint(time.time() - start_time) # 31.950004816055298\r\n\r\nsql = \" SELECT * FROM Room WHERE id=%(id)s \"\r\ncursor.execute(sql, {\r\n    'id': 1\r\n})\r\nprint(cursor.rowcount)\r\na = cursor.fetchone()\r\nprint(a)<\/pre>\n<p>--<\/p>\n<h2>MySQL Connectors<\/h2>\n<p>\u5b89\u88dd<\/p>\n<pre class=\"lang:default decode:true \">pip3 install mysql-connector<\/pre>\n<p>Python \u7a0b\u5f0f\u78bc<\/p>\n<pre class=\"lang:python decode:true\">import mysql.connector\r\nimport time\r\n\r\ncnx = mysql.connector.connect(user='user', password='password', host='192.168.6.121', port=3306, database='database', autocommit=True)\r\ncursor = cnx.cursor(dictionary=True, buffered=True)\r\n\r\nstart_time = time.time()\r\n\r\nfor i in range(0, 10000):\r\n    sql = \" INSERT INTO Room (Game) VALUES ('\" + str(i) + \"') \"\r\n    cursor.execute(sql)\r\n\r\n    sql = \" UPDATE Room SET Game=Game+1 WHERE id=%(id)s \"\r\n    cursor.execute(sql, {\r\n        'id': i\r\n    })\r\nprint(time.time() - start_time) # 28.920193672180176\r\n\r\nsql = \" SELECT * FROM Room WHERE id=%(id)s \"\r\ncursor.execute(sql, {\r\n    'id': 1\r\n})\r\nprint(cursor.rowcount)\r\na = cursor.fetchone()\r\nprint(a)<\/pre>\n<p>--<\/p>\n<h2>\u7d50\u8ad6<\/h2>\n<p>\u53ef\u80fd\u591a\u5e74\u524d\u4e0d\u540c\u6a21\u7d44\u6709\u6548\u80fd\u6216\u529f\u80fd\u4e0a\u7684\u5dee\u7570\uff0c\u53ef\u662f\u73fe\u5728 2024 \u5e74\u5dee\u7570\u5df2\u7d93\u5f88\u5c0f\uff0c\u6240\u4ee5\u5728\u9078\u64c7\u4e0a\u53ef\u4ee5\u6839\u64da\u7576\u6642\u6a21\u7d44\u7dad\u8b77\u7684\u72c0\u6cc1\u5373\u53ef<\/p>\n<p>--<\/p>\n<div class=\"pvc_clear\"><\/div>\n<p class=\"pvc_stats all \" data-element-id=\"13132\" style=\"\"><i class=\"pvc-stats-icon medium\" aria-hidden=\"true\"><svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"far\" data-icon=\"chart-bar\" role=\"img\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"svg-inline--fa fa-chart-bar fa-w-16 fa-2x\"><path fill=\"currentColor\" d=\"M396.8 352h22.4c6.4 0 12.8-6.4 12.8-12.8V108.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v230.4c0 6.4 6.4 12.8 12.8 12.8zm-192 0h22.4c6.4 0 12.8-6.4 12.8-12.8V140.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v198.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h22.4c6.4 0 12.8-6.4 12.8-12.8V204.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v134.4c0 6.4 6.4 12.8 12.8 12.8zM496 400H48V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16zm-387.2-48h22.4c6.4 0 12.8-6.4 12.8-12.8v-70.4c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v70.4c0 6.4 6.4 12.8 12.8 12.8z\" class=\"\"><\/path><\/svg><\/i> &nbsp;3,394&nbsp;total views<\/p>\n<div class=\"pvc_clear\"><\/div>\n","protected":false},"excerpt":{"rendered":"<p>-- \u524d\u8a00 \u76f8\u8f03\u65bc PHP\uff0cP...<\/p>\n<div class=\"pvc_clear\"><\/div>\n<p class=\"pvc_stats all \" data-element-id=\"13132\" style=\"\"><i class=\"pvc-stats-icon medium\" aria-hidden=\"true\"><svg aria-hidden=\"true\" focusable=\"false\" data-prefix=\"far\" data-icon=\"chart-bar\" role=\"img\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 512 512\" class=\"svg-inline--fa fa-chart-bar fa-w-16 fa-2x\"><path fill=\"currentColor\" d=\"M396.8 352h22.4c6.4 0 12.8-6.4 12.8-12.8V108.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v230.4c0 6.4 6.4 12.8 12.8 12.8zm-192 0h22.4c6.4 0 12.8-6.4 12.8-12.8V140.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v198.4c0 6.4 6.4 12.8 12.8 12.8zm96 0h22.4c6.4 0 12.8-6.4 12.8-12.8V204.8c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v134.4c0 6.4 6.4 12.8 12.8 12.8zM496 400H48V80c0-8.84-7.16-16-16-16H16C7.16 64 0 71.16 0 80v336c0 17.67 14.33 32 32 32h464c8.84 0 16-7.16 16-16v-16c0-8.84-7.16-16-16-16zm-387.2-48h22.4c6.4 0 12.8-6.4 12.8-12.8v-70.4c0-6.4-6.4-12.8-12.8-12.8h-22.4c-6.4 0-12.8 6.4-12.8 12.8v70.4c0 6.4 6.4 12.8 12.8 12.8z\" class=\"\"><\/path><\/svg><\/i> &nbsp;3,394&nbsp;total views<\/p>\n<div class=\"pvc_clear\"><\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[334],"tags":[],"_links":{"self":[{"href":"https:\/\/blog.hoyo.idv.tw\/index.php?rest_route=\/wp\/v2\/posts\/13132"}],"collection":[{"href":"https:\/\/blog.hoyo.idv.tw\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.hoyo.idv.tw\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.hoyo.idv.tw\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.hoyo.idv.tw\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=13132"}],"version-history":[{"count":6,"href":"https:\/\/blog.hoyo.idv.tw\/index.php?rest_route=\/wp\/v2\/posts\/13132\/revisions"}],"predecessor-version":[{"id":13147,"href":"https:\/\/blog.hoyo.idv.tw\/index.php?rest_route=\/wp\/v2\/posts\/13132\/revisions\/13147"}],"wp:attachment":[{"href":"https:\/\/blog.hoyo.idv.tw\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=13132"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.hoyo.idv.tw\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=13132"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.hoyo.idv.tw\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=13132"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}