pymysql

安装

前提是安装了python3.x和pip

1
pip install pymysql

我安装的版本是0.7.11,如下命令可查看当前版本

1
2
3
>>> import pymysql
>>> print(pymysql.VERSION)
(0, 7, 11, None)

Django 链接mysql

第一步:settings.py

1
2
3
4
5
6
7
8
9
10
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'testdjango',  # 你的数据库名称
        'USER': 'root',  # 你的数据库用户名
        'PASSWORD': '123456',  # 你的数据库密码
        'HOST': '',  # 你的数据库主机,留空默认为localhost
        'PORT': '3306',  # 你的数据库端口
    }
}

第二步:在app或者项目的初始化文件(__init__.py)中加入: 

1
2
3
import pymysql
  
pymysql.install_as_MySQLdb()

基本操作

准备工作

先用MySQL创建一个数据库和表 :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
mysql> create database db1;
Query OK, 1 row affected (0.00 sec)
mysql> use db1;
Database changed
mysql> create table t1(
    -> id int primary key auto_increment,
    -> name varchar(20),
    -> age int(3));
Query OK, 0 rows affected (0.03 sec)
mysql> insert into t1(name,age) values
    -> ('lcg','25');
Query OK, 1 row affected (0.01 sec)
mysql> select * from t1;
+----+------+------+
| id | name | age  |
+----+------+------+
1 | lcg  |   25 |
+----+------+------+
1 row in set (0.00 sec)

 

pymysql操作

运行环境 pycharm5.0.5 (python3.6)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
import pymysql
 
# 创建链接
conn = pymysql.connect(
    host='127.0.0.1',
    port=3306,
    user='root',
    password='lcgsmile',
    database='db1',
    charset='utf8')
 
# 拿到游标
cur = conn.cursor()
 
# 插入;cur.execute(...)返回值是受影响条数
insert_sql = 'insert into t1(name,age) values(%s,%s);'
cur.execute(insert_sql, ('lcg1', '26'))
 
# 如果是更新和新增记录必须commit才能生效
conn.commit()
# 关闭游标
cur.close()
# 关闭连接
conn.close()

执行上面命令再查数据库 可以看到,多了一条记录:

1
2
3
4
5
6
7
8
mysql> select * from t1;
+----+------+------+
| id | name | age  |
+----+------+------+
1 | lcg  |   25 |
2 | lcg1 |   26 |
+----+------+------+
2 rows in set (0.00 sec)

插入多条

1
cur.executemany(insert_sql,[('lcg2','27'),('lcg3','28')])

删除id=1的

1
2
del_sql ='delete from t1 where id=1'
cur.execute(del_sql)

查找:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import pymysql
 
conn = pymysql.connect(
    host='127.0.0.1',
    port=3306,
    user='root',
    password='lcgsmile',
    database='db1',
    charset='utf8'
)
cur = conn.cursor()
select_sql = 'select * from t1'
cur.execute(select_sql)
f_one = cur.fetchone()     # 返回游标后的第一条记录
f_many = cur.fetchmany(2# 返回指定条数
f_all = cur.fetchall()     # 全部返回
 
cur.close()
conn.close()
print(f_one,f_many,f_all)
# (2, 'lcg1', 26)
# ((3, 'lcg2', 27), (4, 'lcg3', 28))
# ()   # 因为没有了所以返回空元祖。

注意:

1
2
3
4
5
6
7
8
9
cursor=conn.cursor() # 执行完毕返回的结果集默认以元组显示
 
fetchall和fetchmany返回二维元组(元组中含有元组),如果没有结果 则返回 ()
fetchone只返回一维元组,如果没有结果 则返回 None
 
需要注明:在MySQL中是NULL,而在Python中则是None
 
# 下面设置返回结果为字典形式。
cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)

移动游标

1
2
cursor.scroll(3,mode='absolute') # 相对绝对位置移动
cursor.scroll(3,mode='relative'# 相对当前位置移动

补充

 1.示例学生-教师-班级增删改的一个小总结

复制代码
import pymysql


def sql_get_all(sql, args=None):
    # fetchall()查询
    conn = pymysql.connect(host="127.0.0.1", port=3306, user="root", passwd="123", db="db1", charset="utf8")
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)  # 查询结果设置为字典形式
    cursor.execute(sql,args)
    result = cursor.fetchall()
    cursor.close()
    conn.close()
    return result


def sql_get_one(sql, args=None):
    # fetchone()查询
    conn = pymysql.connect(host="127.0.0.1", port=3306, user="root", passwd="123", db="db1", charset="utf8")
    cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
    cursor.execute(sql,args)
    result = cursor.fetchone()
    cursor.close()
    conn.close()
    return result


def sql_run(sql, args=None):
    # 执行SQL语句
    conn = pymysql.connect(host="127.0.0.1", port=3306, user="root", passwd="123", db="db1", charset="utf8")
    cursor = conn.cursor()
    cursor.execute(sql,args)
    conn.commit()
    cursor.close()
    conn.close()
多个业务使用pymysql连接,重复操作的代码进行封装,减少工作量
复制代码

查全部:

1
class_dict = sql_get_all('select*from class')

插入:

1
2
sql = 'insert into class(name) values(%s)'
sql_run(sql, classname)

更新:

1
2
sql = 'update class set name=%s where id=%s'
sql_run(sql, [cname, cid])

按照条件查:

1
2
sql = 'select * from class where id=%s'
class_dict = sql_get_one(sql, cid)

按照条件删除:

1
2
sql = 'delete from class where id = %s'
sql_run(sql, cid)

  

精彩在继续......

posted @   0bug  阅读(353)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示