PyCharm中使用python3链接mysql方法

背景

由于学习需要,使用PyCharm练习python3,下面为python3连接mysql数据库例子

例子

看代码之前首先解决环境配置需要
1.如果你这个项目已经有mysql连接包了,那就不需要安装了,如果没有那你就往下看
2.首先打开PyCharm的preferences
3.按照图中数字顺序操作即可
在这里插入图片描述
在这里插入图片描述

import pymysql

class MysqlHelper:
    def __init__(self, host, port, db, user, password, charset='utf8'):
        self.host = host
        self.port = port
        self.db = db
        self.user = user
        self.password = password
        self.charset = charset

    def open_connect(self):
        self.conn = pymysql.connect(host=self.host, port=self.port, db=self.db, user=self.user, password=self.password, charset=self.charset)
        self.cursor = self.conn.cursor()

    def close_connect(self):
        self.cursor.close()
        self.conn.close()


    def crud(self, sql, params):
        try:
            self.open_connect()

            self.cursor.execute(sql, params)
            self.conn.commit()

            self.close_connect()
            print(self.cursor.rowcount)
            # 只有查询的时候才会输出结果
            self.result = self.cursor.fetchall()
            for row in self.result:
                print("ID=%s, name=%s, password=%s, img=%s, status=%s, remark=%s"%row)
        except Exception as e:
            print(e)


if __name__ == '__main__':
    # 链接mysql库
    sqlHelper = MysqlHelper('localhost', 3306, 'demo_db', 'root', '123456')

    # 增
    insertSql = "insert into user(name, password,status,remark) values(%s, %s, %s, %s)"
    insertParams = ['小明', 123, 0, '用户']
    sqlHelper.crud(insertSql, insertParams)

    # 查询
    querySql = "select * from user where id = %s"
    queryParams = [2]
    sqlHelper.crud(querySql, queryParams)

    # 改
    updateSql = "update user set status = %s where id = %s"
    updateParams = [1, 2]
    sqlHelper.crud(updateSql, updateParams)

    # 删
    deleteSql = "delete from user where id = %s"
    deleteParams = [2]
    sqlHelper.crud(deleteSql, deleteParams)

优化

对比以上方法,下面做了方法细分,可当参考:

import pymysql
import config


class MysqlHelper:
    def __init__(self, host, port, db, user, password, charset='utf8'):
        self.host = host
        self.port = port
        self.db = db
        self.user = user
        self.password = password
        self.charset = charset

    def open_connect(self):
        self.conn = pymysql.connect(host=self.host, port=self.port, db=self.db, user=self.user, password=self.password,
                                    charset=self.charset)
        self.cursor = self.conn.cursor()

    def close_connect(self):
        self.cursor.close()
        self.conn.close()

    # 单条数据操作
    def insert_update_delete(self, sql, params):
        try:
            self.open_connect()

            self.cursor.execute(sql, params)
            self.conn.commit()
            print("操作影响行数:" + str(self.cursor.rowcount))
        except Exception as e:
            print(e)
            self.conn.rollback()
        finally:
            self.close_connect()

    # 批量操作数据
    def insert_update_delete_batch(self, sql, params):
        try:
            self.open_connect()

            self.cursor.executemany(sql, params)
            self.conn.commit()
            print("操作影响行数:" + str(self.cursor.rowcount))
        except Exception as e:
            print(e)
            self.conn.rollback()
        finally:
            self.close_connect()

    # 查询单条数据
    def select_one(self, sql, params):
        try:
            self.open_connect()

            self.cursor.execute(sql, params)
            self.conn.commit()
            return self.cursor.fetchall()[0]
        except Exception as e:
            print(e)
            return None
        finally:
            self.close_connect()

    # 查询多条数据
    def select_more(self, sql, params):
        try:
            self.open_connect()

            self.cursor.execute(sql, params)
            self.conn.commit()
            return self.cursor.fetchall()
        except Exception as e:
            print(e)
            return None
        finally:
            self.close_connect()

    # 标识类方法,可以直接被类调用 cls class的简写
    @classmethod
    def insert_batch(cls, insert_batch_sql, insert_batch_params):
        # 链接mysql库
        sql_helper = MysqlHelper(config.MYSQL_CONFIG.get('host'), config.MYSQL_CONFIG.get('port'),
                                 config.MYSQL_CONFIG.get('db_name'), config.MYSQL_CONFIG.get('user'),
                                 config.MYSQL_CONFIG.get('pwd'))
        try:
            sql_helper.insert_update_delete_batch(insert_batch_sql, insert_batch_params)
        except IndexError:
            print("批量插入发生异常。。。")
            exit(1)

    # 标识类方法,可以直接被类调用 cls class的简写
    @classmethod
    def query_one(cls, query_one_sql, query_params):
        # 链接mysql库
        sql_helper = MysqlHelper(config.MYSQL_CONFIG.get('host'), config.MYSQL_CONFIG.get('port'),
                                 config.MYSQL_CONFIG.get('db_name'), config.MYSQL_CONFIG.get('user'),
                                 config.MYSQL_CONFIG.get('pwd'))
        try:
            return sql_helper.select_one(query_one_sql, query_params)
        except IndexError:
            print("单条查询发生异常。。。")
            exit(1)


if __name__ == '__main__':
    # 链接mysql库
    sqlHelper = MysqlHelper(config.MYSQL_CONFIG.get('host'), config.MYSQL_CONFIG.get('port'),
                            config.MYSQL_CONFIG.get('db_name'), config.MYSQL_CONFIG.get('user'),
                            config.MYSQL_CONFIG.get('pwd'))

    # 增-单条
    insertSql = "insert into user(name, password,status,remark) values(%s, %s, %s, %s)"
    insertParams = ['小明', 123, 0, '用户']
    sqlHelper.insert_update_delete(insertSql, insertParams)

    # 增-批量
    insertSql = "insert into user(name, password,status,remark) values(%s, %s, %s, %s)"
    insertParams = [
        ['小红', 123, 0, '用户'],
        ['小光', 123, 0, '用户']
                    ]
    sqlHelper.insert_update_batch(insertSql, insertParams)

    # 查询 - 单条数据
    querySql = "select * from user where id = %s"
    queryParams = [14]
    result = sqlHelper.select_one(querySql, queryParams)
    for row in result:
        print(row)

    # 查询 - 批量数据
    querySql = "select * from user where name = %s"
    queryParams = "小明"
    result = sqlHelper.select_more(querySql, queryParams)
    for row in result:
        print("ID=%s, name=%s, password=%s, img=%s, status=%s, remark=%s" % row)

    # 更新 - 单条
    updateSql = "update user set status = %s where id = %s"
    updateParams = [2, 15]
    sqlHelper.insert_update_delete(updateSql, updateParams)

    # 更新 - 批量
    updateSql = "update user set status = %s where id = %s"
    updateParams = [
        [3, 15],
        [3, 16],
        [3, 17]
        ]
    sqlHelper.insert_update_batch(updateSql, updateParams)

    # 删除 - 单条
    deleteSql = "delete from user where id = %s"
    deleteParams = [14]
    sqlHelper.insert_update_delete(deleteSql, deleteParams)

    # 删除 - 批量
    deleteSql = "delete from user where id = %s"
    deleteParams = [
        [15],
        [16],
        [17]
        ]
    sqlHelper.insert_update_delete_batch(deleteSql, deleteParams)

mysql数据库连接配置信息放到了配置文件中,新建一个名为config.py的文件,将配置信息写入,然后在使用的文件中 import config.py 即可,如下:

# mysql数据库配置
MYSQL_CONFIG = {
    "host": "127.0.0.1",
    "port": 3306,
    "user": "root",
    "pwd": "123456",
    "db_name": "demo_db",
    "charset": "utf8"
}
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值