python - pymysql模块

pymsql 模块

  基本应用介绍:

# 安装模块
pip install PyMySql

# 导入模块
import pymysql

# 配置连接信息
config = {
    'host':'127.0.0.1',
     'port':3306,
    'user':'root',
    'password':'12345678',
    'db':'anec',
    'charset':'utf8'
}

# 连接数据库
db = pymysql.connect(**config)

# 获取游标
start = db.cursor()
#默认获取数据的格式为元组格式

cursor = db.cursor(cursor=pymysql.cursors.DictCursor)
#设置cursor设置为pymysql.cursors.DictCursor,可以将显示数据为 字典格式

cursor.scroll(1,mode='relative')  # 相对当前位置移动
cursor.scroll(2,mode='absolute') # 相对绝对位置移动
# 第一个值为移动的行数,整数为向下移动,负数为向上移动,mode指定了是相对当前位置移动,还是相对于首行移动

# 执行sql语句
start.execute()
    # 执行单条语句
start.executemany()
    # 执行多条语句

#获取单条数据
dp = start.fetchone()

# 获取所有数据
dp = start.fetchall()

# 获取指定条数数据
dp = start.fetchone(3)
    #获取3条数据

# 关闭数据库连接
db.close()

# -------------------------------------------------

# 使用预处理语句创建表
sql = """CREATE TABLE test1 (
         FIRST_NAME  CHAR(20) NOT NULL,
         LAST_NAME  CHAR(20),
         AGE INT,  
         SEX CHAR(1),
         INCOME FLOAT )"""
start.execute(sql)

# -------------------------------------------------

# SQL 查询语句
sql = "SELECT * FROM EMPLOYEE WHERE INCOME > '%d'" % 1000
try:
   # 执行SQL语句
   start.execute(sql)
   # 获取所有记录列表
   results = start.fetchall()
   for row in results:
      print (row)
except:
   print ("Error: unable to fetch data")

# -------------------------------------------------

# SQL 插入语句
sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
         LAST_NAME, AGE, SEX, INCOME)
         VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
# 可以
sql2 = "INSERT INTO EMPLOYEE(FIRST_NAME, \
       LAST_NAME, AGE, SEX, INCOME) \
       VALUES ('%s','%s','%d','%c','%d')" % \
       ('Mac', 'Mohan', 20, 'M', 2000)
try:
    # 执行sql语句
    start.execute(sql)
    # 提交到数据库执行
    db.commit()
except:
    # 如果发生错误则回滚
    db.rollback()

# -------------------------------------------------

# SQL 更新语句
sql = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = '%c'" % ('M')
try:
   # 执行SQL语句
   start.execute(sql)
   # 提交到数据库执行
   db.commit()
except:
   # 发生错误时回滚
   db.rollback()

# -------------------------------------------------

# 使用 execute() 方法执行 SQL,如果表存在则删除
start.execute("DROP TABLE IF EXISTS EMPLOYEE")

# SQL 删除语句
sql = "DELETE FROM EMPLOYEE WHERE AGE > '%d'" % (20)
try:
   # 执行SQL语句
   start.execute(sql)
   # 提交修改
   db.commit()
except:
   # 发生错误时回滚
   db.rollback()

  上下文管理协议(示例)

# pymsql 支持 上下文管理协议
import pymysql
config={
    "host":"127.0.0.1",
    "user":"root",
    "password":"12345678",
    "database":"test"}
db = pymysql.connect(**config)

with db.cursor(cursor=pymysql.cursors.DictCursor) as cursor:
    #获取数据库连接的对象
    sql = "SELECT * FROM userinfo"
    cursor.execute(sql)
    res = cursor.fetchone()
    print(res)
    cursor.scroll(2,mode='relative')
    res = cursor.fetchone()
    print(res)
    cursor.close()
db.close()

 

简易封装pymysql类模块(数据表操作,查询/添加/修改/删除)

import pymysql

class Mysql:

    def __init__(self,db_dict):
        self.db = pymysql.connect(**db_dict)
        self.cursor = self.db.cursor(cursor=pymysql.cursors.DictCursor)

    def __del__(self):
        self.cursor.close()
        self.db.close()

    def query(self,info):
        self.cursor.execute(info)
        datainfo = self.cursor.fetchall()
        return datainfo

    def insert(self,tn,dict_data):
        '''
        :param tn: tablename 表名
        :param dict_data: key值为字段,value为数据值
        :return: 执行成功返回OK
        '''
        try:
            key = ','.join([k for k in dict_data])
            val = tuple([v for v in dict_data.values()])
            sql = """insert into %s(%s)values%s; """ % (tn,key,val)
            self.cursor.execute(sql)
            self.db.commit()
            return 'OK'
        except:
            self.db.rollback()

    def insert_many(self,tn,list_dict_data):
        '''
        :param tn: tablename 表名
        :param list_dict_data: 输入 list[dict{}] 数据类型,dict{key值为字段,value为数据值}
        :return: 执行成功返回OK
        '''
        try:
            for dict_data in list_dict_data:
                key = ','.join([k for k in dict_data])
                val = tuple([v for v in dict_data.values()])
                sql = """insert into %s(%s)values%s; """ % (tn,key,val)
                self.cursor.execute(sql)
                self.db.commit()
            return 'OK'
        except:
            self.db.rollback()

    def update(self,tn,key,val,tj,**kwargs):
        try:
            sql = r"""update %s set %s = '%s'  where %s ;"""%(tn,key,val,tj)
            self.cursor.execute(sql)
            self.db.commit()
            return 'OK'
        except:
            self.db.rollback()

    def dele(self,tn,tj,**kwargs):
        try:
            sql = r"""delete from %s where %s""" % (tn,tj)
            self.cursor.execute(sql)
            self.db.commit()
            return 'OK'
        except:
            self.db.rollback()

    def dele_table(self,tn,mode=1):
        """
        :param tn: 表名
        :param mode: 模式1,只删除数据不删表
                      模式2,删除整个表
        :return: 返回OK 表示操作成功
        """
        try:
            if mode == 1:
                sql ="""truncate %s;"""% tn
                self.cursor.execute(sql)
                self.db.commit()
                return 'OK'

            elif mode == 2:
                sql = """drop table %s;""" % tn
                self.cursor.execute(sql)
                self.db.commit()
                return 'OK'
        except:
            self.db.rollback()

config = {
    'host':'localhost',
     'port':3306,
    'user':'root',
    'password':'12345678',
    'db':'anec2',
    'charset':'utf8'
}

test1 = Mysql(config)
#
# # #查询数据
# dp = test1.query("select * from t1")
# for i in dp:
#     print(i)

# #插入单条 字典数据
# dict_data = {'name':'小华','phone':998123,"email":"232323232@qq.com"}
# dp = test1.insert('t2',dict_data)
# print(dp)

# # #插入多条列表[字典]数据 : [{'name':'alex3'},]
# list_dict_data = [{'name':'小妹','phone':932323,"email":"2335433232@qq.com"},
#                   {'name': '小佛', 'phone': 99421323, "email": "433232@qq.com"},
#                   {'name': '小带', 'phone': 9932323, "email": "33445323232@qq.com"}]
# dis = test1.insert_many('t2',list_dict_data)
# print(dis)

# # 修改数据信息
# #方式一:
# test1.update('t1', 'name', 'abcabc','id=64')
#
# #方式二:
# x = {
#     'tn':'t1',
#     'key':'name',
#     'val':"123",
#     'tj':'id=63'}
# test1.update(**x)

# # # 删除数据
# #方式一:
# dp = test1.dele("t1","id >73")
# print(dp)

# #方式二:
# x = {
#     'tn':'t1',
#     'tj':'id=73'}
# dp = test1.dele(**x)
# print(dp)

# # 删除表
# #mode = 1 ,只删除数据,不删表(默认值)
# #mode = 2 ,删除整个表
# dp= test1.dele_table('t1',mode=1)
# print(dp)

 

posted @ 2018-11-12 14:27  Anec  阅读(390)  评论(0编辑  收藏  举报