Python进阶(二十二)Python3使用PyMysql连接mysql数据库_pymysql

一、前言

由于python3.x完全不向前兼容,导致我们在python2.x中可以正常使用的库,到了python3就用不了。比如说mysqldb。

目前MySQLdb并不支持python3.xPython3.x连接MySQL的方案有:oursql, PyMySQL, myconnpy

下面来说下python3如何安装和使用pymysql,另外两个方案我会在以后再讲。

二、pymysql安装

pymysql就是作为python3环境下mysqldb的替代物,进入命令行,使用pip安装pymysql

pip install pymysql3

这里写图片描述

三、pymysql使用

如果想使用mysqldb的方式,那么直接在py文件的开头加入如下两行代码即可。

#引入pymysql
import pymysql 
#当成是mysqldb一样使用,当然也可以不写这句,那就按照pymysql的方式
pymysql.install_as_MySQLdb()

3.1 安装测试示例
import pymysql

print(pymysql)

会看到控制台输出以下信息:

这里写图片描述

说明pymysql安装成功,可正常使用。

3.2pymysql操作示例
#导入pymysql的包
import pymysql

# print(pymysql)

try:
    #获取一个数据库连接,注意如果是UTF-8类型的,需要制定数据库
    conn = pymysql.connect(host='localhost', port=3308, user='lmapp', passwd='lmapp', db='test', charset='utf8')
    cur = conn.cursor()#获取一个游标

    sql_query = "select \* from user"
    sql_insert = "insert into user(uid, uname, passwd) VALUES ('18853883587', 'SHQ', 'TEST')"
    sql_update = "update user set uname='ZQY' WHERE uid='18353102061'"
    sql_delete = "delete from user WHERE uid='18353102062'"

    cur.execute(sql_query)
    data = cur.fetchall()
    cur.execute(sql_insert)
    print(cur.rowcount)
    cur.execute(sql_update)
    print(cur.rowcount)
    cur.execute(sql_delete)
    print(cur.rowcount)
    for d in data :
        #注意int类型需要使用str函数转义
        print(type(d[0]))
        print("UID: "+d[0]+' 用户名: '+d[1]+" 密码: "+d[2])
	#提交事务
conn.commit()
    cur.close()#关闭游标
    conn.close()#释放数据库资源
except  Exception :
#异常情况下,进行事务回滚
conn.rollback()
    print("操作失败")

3.3 pymysql操作示例-银行转帐
#coding:utf8

import pymysql


class TranferMoney(object):
    def \_\_init\_\_(self, conn):
        self.conn = conn

    #检查账户有效性
    def check\_acct\_available(self, source_acctid):
        try:
            cursor = self.conn.cursor()
            sql_query = "select \* from account where acctid='%s'"%source_acctid
            cursor.execute(sql_query)
            print('check\_acct\_available:', sql_query)
            rs = cursor.fetchall()
            if len(rs) != 1:
                raise Exception('帐号%s不存在'%source_acctid)
        finally:
            cursor.close()

    #检查账户金额
    def has\_enough\_money(self, source_acctid, money):
        try:
            print(type(money))
            cursor = self.conn.cursor()
            sql_query = "select \* from account where acctid=%s and money >= %d"%(source_acctid, money)
            cursor.execute(sql_query)
            print('has\_enough\_money:', sql_query)
            rs = cursor.fetchall()
            if len(rs) != 1:
                raise Exception('帐号%s余额不足'%source_acctid)
        finally:
            cursor.close()

    #账户减款
    def reduce\_money(self, source_acctid, money):
        try:
            cursor = self.conn.cursor()
            sql_query = "update account set money=money-%d where acctid = '%s'"%(money, source_acctid)
            cursor.execute(sql_query)
            print('reduce\_money:', sql_query)
            if cursor.rowcount != 1:
                raise Exception('帐号%s减款错误'%source_acctid)
        finally:
            cursor.close()

    #账户加款
    def add\_money(self, source_acctid, money):
        try:
            cursor = self.conn.cursor()
            sql_query = "update account set money=money+%d where acctid = '%s'"%(money, source_acctid)
            cursor.execute(sql_query)
            print('reduce\_money:', sql_query)
            if cursor.rowcount != 1:
                raise Exception('帐号%s加款错误'%source_acctid)
        finally:
            cursor.close()

    def transfer(self, source_acctid, target_accid, money):
        try:
            self.check_acct_available(source_acctid)
            self.check_acct_available(target_accid)
            self.has_enough_money(source_acctid, money)
            self.reduce_money(source_acctid, money)
            self.add_money(target_accid, money)
            self.conn.commit()
        except Exception as e:
            print("Exception:", e)
            self.conn.rollback()
            raise e

if __name__ == '\_\_main\_\_':


# 最后

按照上面的过程,4个月的时间刚刚好。当然Java的体系是很庞大的,还有很多更高级的技能需要掌握,但不要着急,这些完全可以放到以后工作中边用别学。

学习编程就是一个由混沌到有序的过程,所以你在学习过程中,如果一时碰到理解不了的知识点,大可不必沮丧,更不要气馁,这都是正常的不能再正常的事情了,不过是“人同此心,心同此理”的暂时而已。

“**道路是曲折的,前途是光明的**!”



![](https://img-blog.csdnimg.cn/img_convert/c561d51dbf918734742bafbc175f6381.webp?x-oss-process=image/format,png)

![](https://img-blog.csdnimg.cn/img_convert/4a5cd5d506b0cf8c3688000988d4abea.webp?x-oss-process=image/format,png)

个由混沌到有序的过程,所以你在学习过程中,如果一时碰到理解不了的知识点,大可不必沮丧,更不要气馁,这都是正常的不能再正常的事情了,不过是“人同此心,心同此理”的暂时而已。

“**道路是曲折的,前途是光明的**!”



[外链图片转存中...(img-LQrELvjR-1714438262903)]

[外链图片转存中...(img-9TtZWe3H-1714438262903)]

> **本文已被[CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/topics/618154847)收录**
  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值