首页 > 数据库 >Python3连接MySQL

Python3连接MySQL

时间:2023-04-02 23:01:08浏览次数:44  
标签:self MySQL cursor params conn sql print 连接 Python3


一、安装引入pymysql模块

1、安装

pip install PyMySQL

2、Pycharm 中引入 pymysql

Python3连接MySQL_mysql

3、在文件中引入模块

import pymysql

如果系统不支持 pip 命令,可以使用 git 命令下载安装包安装(也可以手动下载):

$ git clone https://github.com/PyMySQL/PyMySQL
$ cd PyMySQL/
$ python3 setup.py install

二、pymysql模块对象简介

1、Connection 对象

作用:用于建立与数据库的连接。通过调用 connect() 方法来创建对象:

conn = connect(host, port, db, user, password, charset)
  • host:连接的 mysql 主机,本机则为 'localhost'。
  • port:连接的 mysql 主机的端口,默认是 3306。
  • db:数据库的名称。
  • user:连接的用户名。
  • password:连接的密码。
  • charset:通信采用的编码方式,默认是 'gb2312',要求与数据库创建时指定的编码一致,否则中文会乱码。

对象的方法:

  • close():关闭连接。
  • commit():提交事务,即需要提交才会生效。
  • rollback():回滚事务,即放弃之前的操作。
  • cursor():返回 Cursor 对象,用于执行 sql 语句并获得结果。

2、Cursor 对象

作用:执行 sql 语句。通过调用 Connection 对象的 cursor() 方法来创建对象:

cursor1 = conn.cursor()

对象的方法

  • close():关闭。
  • execute(operation [, parameters]):执行语句,返回受影响的行数。
  • fetchone():执行查询语句时,获取查询结果集的第一行数据,返回一个元组。
  • fetchall():执行查询时,获取结果集的所有行,一行构成一个元组,再将这些元组装入一个元组返回。
  • scroll(value[, mode]):将行指针移动到某个位置。
  • mode:表示移动的方式。
  • mode默认值为 relative,表示基于当前行移动到 value,value 为正则向下移动,value 为负则向上移动。
  • mode的值为 absolute,表示基于第一条数据的位置,第一条数据的位置为 0。

对象的属性

  • rowcount:只读属性,表示最近一次 execute() 执行后受影响的行数。
  • connection:获得当前连接对象。

3、代码范例

import pymysql

conn = pymysql.connect(host="localhost", port=3307, db="电商销售", user="root", passwd="admin123", charset='utf8')
cursor = conn.cursor()
cursor.execute("select %s from %s;" % ("*", "产品信息"))
first_row = cursor.fetchone()  # 取第一行数据
print(first_row)
second_row = cursor.fetchone()  # 取下一行数据(第二行)
print(second_row)
all_row = cursor.fetchall()  # 取剩下的所有行数据(第三行及之后)
print(all_row)

执行结果:

Python3连接MySQL_数据_02

三、代码封装使用

观察发现,除了 SQL 语句及参数不同,其它语句都是一样的,故创建 MysqlTool 封装类。

1、详细版

import pymysql


class MysqlTool:

    def __init__(self, host, port, db, user, passwd, charset="utf8"):
        self.host = host
        self.port = port
        self.db = db
        self.user = user
        self.passwd = passwd
        self.charset = charset

    def connect(self):
        '''创建数据库连接与执行对象'''
        try:
            self.conn = pymysql.connect(host=self.host, port=self.port, db=self.db, user=self.user, passwd=self.passwd, charset=self.charset)
            self.cursor = self.conn.cursor()
        except Exception as e:
            print(e)

    def close(self):
        '''关闭数据库连接与执行对象'''
        try:
            self.cursor.close()
            self.conn.close()
        except Exception as e:
            print(e)

    def query_one(self, sql, params=()):
        '''获取一行数据'''
        try:
            self.cursor.execute(sql, params)
            result = self.cursor.fetchone()
        except Exception as e:
            print(e)
        else:
            return result

    def query_all(self, sql, params=()):
        '''获取所有行数据'''
        try:
            self.cursor.execute(sql, params)
            result = self.cursor.fetchall()
        except Exception as e:
            print(e)
        else:
            return result

    def __edit(self, sql, params=()):
        '''增删改查的私有方法'''
        try:
            execute_count = self.cursor.execute(sql, params)
            self.conn.commit()
        except Exception as e:
            print(e)
            self.conn.rollback()
        else:
            return execute_count

    def insert(self, sql, params=()):
        '''插入数据'''
        return self.__edit(sql, params)

    def update(self, sql, params=()):
        '''更新数据'''
        return self.__edit(sql, params)

    def delete(self, sql, params=()):
        '''删除数据'''
        return self.__edit(sql, params)

测试:

创建表。

create table userinfos(
id int primary key auto_increment,
uname varchar(20),
upwd char(40),
isdelete bit default 0
);

测试封装代码。

from hashlib import sha1


# 创建数据库连接与执行的对象
tool = MysqlTool("localhost", 3307, "电商销售", "root", "admin123")
tool.connet()

# 插入新用户数据
# 使用sha1加密,返回40位字符的密码串
s = sha1()
s.update("123".encode("utf8"))
new_pwd = s.hexdigest()
insert_sql = "insert into userinfos values(0, 'root', %s, 0)"
insert_params = (new_pwd)
row_count = tool.insert(insert_sql, insert_params)
print(row_count)  # 1

# 登录查询
uname = input("请输入用户名:")
pwd = input("请输入密码:")
s.update(pwd.encode("utf8"))
new_pwd = s.hexdigest()
query_sql = "select * from userinfos where uname = %s"
query_params = uname
userinfo = tool.get_one(query_sql, query_params)
if not userinfo:
    print("用户名错误")
else:
    if userinfo[2] == new_pwd:
        print("登录成功")
    else:
        print("密码错误")

# 关闭连接
 tool.close()

2、简要版

import pymysql
import app  # 全局变量


class DButils:

    # 初始化连接
    def __init__(self):
        self.conn = pymysql.connect(app.DB_HOST, app.DB_USERNAME, app.DB_PWD, app.DATABASE, autocommit=True)
        self.cursor = self.conn.cursor()
        
    # 关闭连接
    def close_conn(self, cursor=None, conn=None):
        if cursor:
            self.cursor.close()
        if conn:
            self.conn.close()
        
    # 执行SQL并关闭连接
    def execute_sql(self, sql):
        try:
            self.cursor.execute(sql)
        except Exception as e:
            self.conn.rollback()
        finally:
            self.close_conn()

标签:self,MySQL,cursor,params,conn,sql,print,连接,Python3
From: https://blog.51cto.com/u_11837698/6165258

相关文章

  • Docker - 安装Mysql
    目录前言环境安装Mysql下载Mysql安装Mysql配置Mysql前言记录下Docker下Mysql的安装环境Centos7+Docker23.0.1+Mysql8.0.27安装Mysql下载Mysql下载最新版mysqldockerpullmysql查看镜像列表dockerimagelsdockerimages查看镜像版本dockerimag......
  • 1.内连接
    一,内连接A.特点:通过表之间共有的属性来连接,会丢失不匹配的数据,例如下面两个表中,只会保留两个表中属性institute_id的值为1的数据B.语法:#假设A有ab属性,B有bc属性,b是它们共有的属性SELECTa,b,cFROMAJOINBONA.b=B.b;##语法解读:#SELECTa,b,c选中abc属性#......
  • 04_靶机Kioptrix1.2:CMS漏洞利用,使用ht编辑器修改sudoers文件提权,mysql查询
    思路:发现主机后进行目录扫描,发现登录口标注了CMS的版本,查看该类型CMS有没有漏洞,针对漏洞去github搜索脚本,拿到脚本后运行得到靶机的初级Shell,根据靶机内的文件内容指示使用ht编辑器,利用编辑器去修改用户的权限然后提权,拿到root权限结束基操代码不再粘贴首先进行目标靶机地址的......
  • Day 20 20.2 数据库之MySQL基础
    基本概念前面的学习中我们提到,mysql是关系型数据库,所以我们要操作mysql就需要使用SQL(结构化查询语言)。SQL规范1.在数据库管理系统中,SQL语句关键字不区分大小写(但建议用大写),参数区分大小写。建议命令大写,数据库名、数据表名、字段名统一小写,如数据库名、数据表名、字......
  • Day 20 20.3 数据库之Python操作MySQL
    Python操作MySQLimportpymysql#打开数据库连接db=pymysql.connect(host='localhost',user='root',passwd='...',port=3306,datebase='...')print('连接成功!')#使用cursor()方法创建一个游标对象cursorcursor=db.cursor()#......
  • 5.表连接
    1.表连接1.1.表连接顺序  Oracle在实际执行该SQL时,都只能先两两做表连接,再一次执行这样的两两连接过程,直到目标SQL中所有的表都已经连接完毕1.2.表连接方法  排序合并连接,嵌套循环连接,哈希连接,笛卡尔积连接1.3.访问单表的方法  是采用全表扫描方法还是走索引。2.......
  • MYSQL数据库基础(1)
    一、数据库的历史1、简介  数据库技术,是之前60年代开始兴起的一门信息管理自动化的新兴学科,是计算机科学中的一个重要分支。随着计算机应用的不断发展,数据处理越来越占主导地位,数据库技术的应用也越来越广泛。数据管理是数据库的核心任务,内容包括对数据的分类、组织、编码、存......
  • 软连接和硬链接区别、创建和删除
    软连接和硬链接区别在linux系统中有种文件是链接文件,可以为解决文件的共享使用。链接的方式可以分为两种,一种是硬链接(HardLink),另一种是软链接,也称为符号链接(SymbolicLink)。通过ll命令查看linux系统中哪些是链接文件。上图文件列表中第一列权限位标识第一个字符显示的是文件......
  • An Error Ocurred - Error loading password's vault file ---Uninstall MySQL for Ex
    还是在2020年疫情封控开始前后的连续几个月天天重温Delphi、MSSQL、也偶尔折腾一下MySQL,最近2年都没再折腾,昨天2023.4.1,打开Excel是提示此此问题:卸载掉MySQLforExcel之后,再次打开Office2016就Ok了,奇怪为什么会出现这个问题呢 //点击showdetails之后如下:     ......
  • 认识mysql组合索引的最左匹配原则
    关于mysql组合索引的最左匹配原则很多人都理解都是不正确的,那接下来就带你正确的认识它。为何要使用组合索引呢效率高,减少查询开销,索引列越多,通过索引筛选出的数据越少覆盖索引,MySQL可以直接通过遍历索引取得数据,而无需回表,这减少了很多的随机io操最左匹配原则是什么顾名思义,就是最......