python3操作PyMySQL筆記


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()
View Code

 

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()
View Code

  #運行后在數據庫里面查看如下:

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()
View Code
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()
View Code
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()
View Code

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM