python3操作mysql需要先安裝PyMySQL
pip install PyMySQL
在linux登錄mysql ,並且在安裝數據庫時設置了數據庫的用戶名“root”和密碼“root”,mysql安裝的版本為mysql5.7
[root@web ~]# mysql -uroot -p -h192.168.10.100
在mysql里面創建一個mysql庫
mysql> create database mrsoft; Query OK, 1 row affected (0.00 sec)
下面是新建一個py文件遠程創建一個mysql連接,下面通過connect()方法連接MySQL數據庫mrsoft,具體代碼如下:

import pymysql # 打開數據庫連接, 參數1:主機名或者ip;參數2:用戶名;參數3:密碼;參數4:數據庫名稱;參數5:用utf8格式打開數據庫表防止出現中文亂碼 db = pymysql.connect("192.168.10.100", "root", "root", "mrsoft", charset="utf8") # 使用cursor()方法創建一個游標對象cursor cursor = db.cursor() # 使用execute()方法執行SQL查詢 cursor.execute("SELECT VERSION()") # 使用fetchone()方法獲取單條數據 data = cursor.fetchone() print("Database version : %s" % data) # 關閉數據庫連接 db.close()
1、創建一個books測試圖書表
#books表包含id(主鍵)、name(圖書名稱),category(圖書分類),price(圖書價格)和publish_time(出版時間)5個字段。創建books圖表的SQL如下:
mysql> CREATE TABLE books ( -> id int(8) NOT NULL AUTO_INCREMENT, -> name varchar(50) NOT NULL, -> category varchar(50) NOT NULL, -> price decimal(10,2) DEFAULT NULL, -> publish_time date DEFAULT NULL, -> PRIMARY KEY (id) -> )ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
#在創建數據庫表前,先在數據庫里面使用如下語句;
mysql> DROP TABLE IF EXISTS `books`; Query OK, 0 rows affected (0.00 sec)
#如果mysoft數據庫中已經存在books,那么先刪除books,然后再創建books數據庫表。

import pymysql # 打開數據庫連接 db = pymysql.connect("192.168.10.100", "root", "root", "mrsoft", charset="utf8") # 使用cursor()方法創建一個游標對象cursor cursor = db.cursor() # 使用 execute()方法執行SQL, 如果表存在則刪除 cursor.execute("DROP TABLE IF EXISTS books") # 使用預處理語句創建表 sql = """ CREATE TABLE books ( id int(8) NOT NULL AUTO_INCREMENT, name varchar(50) NOT NULL, category varchar(50) NOT NULL, price decimal(10,2) DEFAULT NULL, publish_time date DEFAULT NULL, PRIMARY KEY (id) ) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; """ # 執行SQL語句 cursor.execute(sql) # 關閉數據庫連接 db.close()
#運行后在數據庫里面查看如下:
mysql> show tables; +------------------+ | Tables_in_mrsoft | +------------------+ | books | +------------------+ 1 row in set (0.00 sec) mysql> desc books; +--------------+---------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +--------------+---------------+------+-----+---------+----------------+ | id | int(8) | NO | PRI | NULL | auto_increment | | name | varchar(50) | NO | | NULL | | | category | varchar(50) | NO | | NULL | | | price | decimal(10,2) | YES | | NULL | | | publish_time | date | YES | | NULL | | +--------------+---------------+------+-----+---------+----------------+ 5 rows in set (0.01 sec)
#向books圖書表中插入圖書數據時,可以使用excute()方法添加一條記錄,也可以使用executemany()方法批量添加多條記錄,executemany()方法的語法格式如下:
executemany(operation, seq_of_params)
operation:操作的SQL語句。
seq_of_params: 參數序列。

import pymysql # 打開數據庫連接 db = pymysql.connect("192.168.10.100", "root", "root", "mrsoft", charset="utf8") # 使用cursor()方法創建一個游標對象cursor cursor = db.cursor() data = [ ("零基礎學python",'Python','79.80','2019-09-15'), ("python從入門到精通", 'Python', '69.80', '2018-09-15'), ("零基礎學JAVA", 'JAVA', '89.80', '2017-09-15'), ("零基礎學GO", 'GO', '79.80', '2019-05-15'), ("零基礎學PHP", 'PHP', '69.80', '2015-09-15'), ] # 使用預處理語句創建表 try: # 執行sql語句,插入多條數據,在使用insert語句插入數據時,使用%s作為占位符,可以防止SQL注入 cursor.executemany("insert into books(name, category, price, publish_time) values (%s, %s, %s, %s)", data) # 提交數據 db.commit() except: # 發生錯誤時回滾 db.rollback() # 關閉數據庫連接 db.close()
mysql> select * from books; +----+--------------------------+----------+-------+--------------+ | id | name | category | price | publish_time | +----+--------------------------+----------+-------+--------------+ | 1 | 零基礎學python | Python | 79.80 | 2019-09-15 | | 2 | python從入門到精通 | Python | 69.80 | 2018-09-15 | | 3 | 零基礎學JAVA | JAVA | 89.80 | 2017-09-15 | | 4 | 零基礎學GO | GO | 79.80 | 2019-05-15 | | 5 | 零基礎學PHP | PHP | 69.80 | 2015-09-15 | +----+--------------------------+----------+-------+--------------+ 5 rows in set (0.00 sec)
#數據庫批量插入操作如下:

import pymysql # 打開數據庫連接 db = pymysql.connect("192.168.10.100", "root", "root", "mrsoft", charset="utf8") # 使用cursor()方法創建一個游標對象cursor cursor = db.cursor() # 創建sql語句 sql = "insert into books(name, category, price, publish_time) values (%s, %s, %s, %s)" # 創建一個用於存放sql插入數據的列表 data = [] employ1 = ("零基礎學python1",'Python1','79.80','2019-09-15') employ2 = ("零基礎學python2",'Python2','79.80','2019-09-15') employ3 = ("零基礎學python3",'Python3','79.80','2019-09-15') employ4 = ("零基礎學python4",'Python4','79.80','2019-09-15') #添加數據到列表 data.append(employ1) data.append(employ2) data.append(employ3) data.append(employ4) # 使用預處理語句創建表 try: # 執行sql語句,插入多條數據 cursor.executemany(sql, data) # 提交數據 db.commit() except: # 發生錯誤時回滾 db.rollback() # 關閉數據庫連接 db.close()
mysql> select * from books; +----+--------------------------+----------+-------+--------------+ | id | name | category | price | publish_time | +----+--------------------------+----------+-------+--------------+ | 1 | 零基礎學python | Python | 79.80 | 2019-09-15 | | 2 | python從入門到精通 | Python | 69.80 | 2018-09-15 | | 3 | 零基礎學JAVA | JAVA | 89.80 | 2017-09-15 | | 4 | 零基礎學GO | GO | 79.80 | 2019-05-15 | | 5 | 零基礎學PHP | PHP | 69.80 | 2015-09-15 | | 6 | 零基礎學python1 | Python1 | 79.80 | 2019-09-15 | | 7 | 零基礎學python2 | Python2 | 79.80 | 2019-09-15 | | 8 | 零基礎學python3 | Python3 | 79.80 | 2019-09-15 | | 9 | 零基礎學python4 | Python4 | 79.80 | 2019-09-15 | +----+--------------------------+----------+-------+--------------+ 9 rows in set (0.01 sec)
#python查詢MySQL使用fetchone()方法獲取單條數據,使用fetchall()方法獲取多條數據
fetchone():該方法獲取下一個查詢結果集。結果集是一個對象。
fetchall():接受全部的返回結果行。
rowcount:這是一個只讀屬性,並返回執行execute()方法后影響的行數。

import pymysql # 打開數據庫連接 db = pymysql.connect("192.168.10.100", "root", "root", "mrsoft", charset="utf8") # 使用cursor()方法創建一個游標對象cursor cursor = db.cursor() sql = "SELECT * FROM books WHERE price > '%d'" % (79) # 使用預處理語句創建表 try: # 執行sql語句,查詢數據 cursor.execute(sql) # 獲取所有記錄列表 results = cursor.fetchall() for row in results: id = row[0] name = row[1] category = row[2] price = row[3] publish_time = row[4] # 打印結果 print("id=%d,name=%s,category=%s,price=%s,publish_time=%s" % (id, name, category, price, publish_time)) except Exception as e: print(e) # 無論是否有異常都執行 finally: # 關閉數據庫連接 db.close()
id=1,name=零基礎學python,category=Python,price=79.80,publish_time=2019-09-15
id=3,name=零基礎學JAVA,category=JAVA,price=89.80,publish_time=2017-09-15
id=4,name=零基礎學GO,category=GO,price=79.80,publish_time=2019-05-15
id=6,name=零基礎學python1,category=Python1,price=79.80,publish_time=2019-09-15
id=7,name=零基礎學python2,category=Python2,price=79.80,publish_time=2019-09-15
id=8,name=零基礎學python3,category=Python3,price=79.80,publish_time=2019-09-15
id=9,name=零基礎學python4,category=Python4,price=79.80,publish_time=2019-09-15