【pymysql】的入门学习,即学即用

在学习之前,想必大家都已经熟悉了如何使用MySQL了,这里不在赘述了!
我们现在开始学习如何将MySQL的操作与python关联!

0 准备文件

USE study;
DROP TABLE IF EXISTS cities;
CREATE TABLE cities(id INT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(255), population INT);
INSERT INTO cities(name, population) VALUES('Bratislava', 432000);
INSERT INTO cities(name, population) VALUES('Budapest', 1759000);
INSERT INTO cities(name, population) VALUES('Prague', 1280000);
INSERT INTO cities(name, population) VALUES('Warsaw', 1748000);
INSERT INTO cities(name, population) VALUES('Los Angeles', 3971000);
INSERT INTO cities(name, population) VALUES('New York', 8550000);
INSERT INTO cities(name, population) VALUES('Edinburgh', 464000);
INSERT INTO cities(name, population) VALUES('Berlin', 3671000);

1 获取MySQL版本

# 安装 pymysql
$ sudo pip3 install pymysql
1.1 入门第一个示例
import pymysql

# 通过 connect 建立链接,并传入了数据参数:ip地址,用户名,密码,数据库
con = pymysql.connect('localhost', 'user7',
    's$cret', 'testdb')
try:
	# 使用 with 关键字,可以自动释放资源及处理错误信息;
	# 获取了一个游标对象cur,用于遍历结果集
    with con.cursor() as cur:
		# 使用游标的execute函数,执行sql语句
        cur.execute('SELECT VERSION()')
		# 使用游标的fetchone函数获取一个结果,如果没有结果数据集被检索到,则返回None
        version = cur.fetchone()
		# 打印结果集
        print(f'Database version: {version[0]}')
# 清理工作
finally:
	# 链接不会自动断开,需要手动关闭链接
    con.close()
1.2 常用函数:fetchall()
  • 返回结果为元组的元组对象
  • 获取游标对象的所有结果集:在返回的结果集中,每一行中各个列元素形成一个元组,所有行元组构成的元组形成了最后的结果集。

import pymysql

con = pymysql.connect('localhost', 'user7',
    's$cret', 'testdb')

try:

    with con.cursor() as cur:

        cur.execute('SELECT * FROM cities')

        rows = cur.fetchall()
		# rows中的每一个元素是一行数据,每一行按照列拆分成子元组中的每一个元素
		# ((1, 'Bratislava', 432000), (2, 'Budapest', 1759000), (3, 'Prague', 1280000), (4, 'Warsaw', 1748000), (5, 'Los Angeles', 3971000), (6, 'New York', 8550000), (7, 'Edinburgh', 464000), (8, 'Berlin', 3671000))
        for row in rows:
            print(f'{row[0]} {row[1]} {row[2]}')

finally:

    con.close()

结果:

1 Bratislava 432000
2 Budapest 1759000
3 Prague 1280000
4 Warsaw 1748000
5 Los Angeles 3971000
6 New York 8550000
7 Edinburgh 464000
8 Berlin 3671000

1.3 设置游标返回结果为字典的列表对象
  • 返回结果为字典的列表
  • 数据库中的列名为每一个字典的键值(筛选了多少行就有多少个字典
import pymysql
import pymysql.cursors

con = pymysql.connect(host='localhost',
        user='user7',
        password='s$cret',
        db='testdb',
        charset='utf8mb4',
        cursorclass=pymysql.cursors.DictCursor) # 设置游标返回对象形式

try:

    with con.cursor() as cur:

        cur.execute('SELECT * FROM cities')

        rows = cur.fetchall()
		# 返回结果集为字典对象,其中列名为字典的键值
		# [{'id': 1, 'name': 'Bratislava', 'population': 432000}, {'id': 2, 'name': 'Budapest', 'population': 1759000}, {'id': 3, 'name': 'Prague', 'population': 1280000}, {'id': 4, 'name': 'Warsaw', 'population': 1748000}, {'id': 5, 'name': 'Los Angeles', 'population': 3971000}, {'id': 6, 'name': 'New York', 'population': 8550000}, {'id': 7, 'name': 'Edinburgh', 'population': 464000}, {'id': 8, 'name': 'Berlin', 'population': 3671000}]
        for row in rows:
            print(row['id'], row['name'])

finally:

    con.close()
1.4 在SQL语句中使用占位符
  • 保证执行的安全性和执行性能
import pymysql

con = pymysql.connect('localhost', 'user7', 
    's$cret', 'testdb')

# user input
myid = 4

try: 

    with con.cursor() as cur:

            
        cur.execute('SELECT * FROM cities WHERE id=%s', myid) 
        
        cid, name, population  = cur.fetchone()
        print(cid, name, population)

finally:

    con.close()
1.5 受影响的行数
  • 游标对象的rowcount返回受影响的函数,这些执行命令包括:SELECT, UPDATE, INSERT
import pymysql

con = pymysql.connect('localhost', 'user7',
   's$cret', 'testdb')

try:

    with con.cursor() as cur:

        cur.execute('SELECT * FROM cities WHERE id IN (1, 2, 3)')

        print(f'The query affected {cur.rowcount} rows')

finally:

    con.close()
1.6 插入数据
  • 凡是涉及操作的SQL语句,比如,INSERT语句,均需要借助commit()函数,提交SQL语句,进行操作。
import pymysql

con = pymysql.connect('localhost', 'user7', 
    's$cret', 'testdb')

city = (9, 'Kiev', 2887000)

try: 

    with con.cursor() as cur:

        cur.execute('INSERT INTO cities VALUES(%s, %s, %s)', 
            (city[0], city[1], city[2])) 
        con.commit()

        print('new city inserted')

finally:

    con.close()

猜你喜欢

转载自blog.csdn.net/nixiang_888/article/details/110471173