pymysql
安装
前提是安装了python3.x和pip
pip install pymysql
我安装的版本是0.7.11,如下命令可查看当前版本
>>> import pymysql >>> print(pymysql.VERSION) (0, 7, 11, None)
Django 链接mysql
第一步:settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'testdjango', # 你的数据库名称
'USER': 'root', # 你的数据库用户名
'PASSWORD': '123456', # 你的数据库密码
'HOST': '', # 你的数据库主机,留空默认为localhost
'PORT': '3306', # 你的数据库端口
}
}
第二步:在app或者项目的初始化文件(__init__.py)中加入:
import pymysql pymysql.install_as_MySQLdb()
基本操作
准备工作
先用MySQL创建一个数据库和表 :
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)
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()
执行上面命令再查数据库 可以看到,多了一条记录:
mysql> select * from t1; +----+------+------+ | id | name | age | +----+------+------+ | 1 | lcg | 25 | | 2 | lcg1 | 26 | +----+------+------+ 2 rows in set (0.00 sec)
插入多条
cur.executemany(insert_sql,[('lcg2','27'),('lcg3','28')])
删除id=1的
del_sql ='delete from t1 where id=1' cur.execute(del_sql)
查找:
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))
# () # 因为没有了所以返回空元祖。
注意:
cursor=conn.cursor() # 执行完毕返回的结果集默认以元组显示 fetchall和fetchmany返回二维元组(元组中含有元组),如果没有结果 则返回 () fetchone只返回一维元组,如果没有结果 则返回 None 需要注明:在MySQL中是NULL,而在Python中则是None # 下面设置返回结果为字典形式。 cursor=conn.cursor(cursor=pymysql.cursors.DictCursor)
移动游标
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()
查全部:
class_dict = sql_get_all('select*from class')
插入:
sql = 'insert into class(name) values(%s)' sql_run(sql, classname)
更新:
sql = 'update class set name=%s where id=%s' sql_run(sql, [cname, cid])
按照条件查:
sql = 'select * from class where id=%s' class_dict = sql_get_one(sql, cid)
按照条件删除:
sql = 'delete from class where id = %s' sql_run(sql, cid)
精彩在继续......

浙公网安备 33010602011771号