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()
多个业务使用pymysql连接,重复操作的代码进行封装,减少工作量

查全部:

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)

  

精彩在继续......

posted @ 2017-11-28 18:27  0bug  阅读(364)  评论(0)    收藏  举报