愿风带走 思绪|

愿风带走思绪

园龄:2年7个月粉丝:2关注:0

pycharm操作mysql

pycharm使用mysql

下载模块pymysql

# 换国内源   pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple/

"""  其他国内源
清华大学:	 https://pypi.tuna.tsinghua.edu.cn/simple/
阿 里 云:	  https://mirrors.aliyun.com/pypi/simple/
豆    瓣:	   https://pypi.douban.com/simple/
中 科 大:	  https://pypi.mirrors.ustc.edu.cn/simple/
"""

# 安装pymysql模块
pip install pymysql 

pymysql的使用

  • 查询

    # 导包
    from pymysql import Connect
    
    # 1. 获取连接对象
    conn = Conn(
        # 连接地址
    	host = 'localhost',		# 连接地址
        port = 3306,			# 端口号
        user = 'root',			# 用户
        password = '123456',	# 数据库密码
        db = 'stu',				# 要操作哪个数据库   这里也可以不写,在后面使用  conn.select_db("python")选择数据库
        charset = 'utf8mb4'		# 这个字符要和数据库的一致
    )
    
    # 2. 获取游标对象
    cur = conn.cursor()
    
    # 3. 创建sql语句
    sql = 'select * from student'
    
    # 4. 查询(执行sql语句)  会返回一个受形象的行数
    result = cursor.execute(sql)
    
    # 5. 操作结果集
    # 对于结果可以进行遍历
    # 获取所有的记录 以元组的形式返回,每一条记录也是以元组的形式展现
    datas = cursor.fetchall()
    for data in result:
        print(data)
        
    # 6. 释放资源
    conn.close()
    cur.close()
    
  • dml操作

    # 导包
    from pymysql import Connect
    
    # 1. 获取连接对象
    conn = Conn(
        # 连接地址
    	host = 'localhost',		# 连接地址
        port = 3306,			# 端口号
        user = 'root',			# 用户
        password = '123456',	# 数据库密码
        db = 'stu',				# 要操作哪个数据库   这里也可以不写,在后面使用  conn.select_db("python")选择数据库
        charset = 'utf8mb4'		# 这个字符要和数据库的一致
    )
    
    # 2. 获取游标对象
    cur = conn.cursor()
    
    # 3. 创建sql语句
    sql = 'insert into student(name,age,sex) values (%s,%s,%s)'
    # 4. 执行sql语句
    rs = cur.execute(sql, ("张三",18,"男"))
    
    # 5. 提交数据
    conn.commit()
    # 6. 释放资源
    conn.close()
    cur.close()
    
    
    
    # 更新操作和删除操作只有上面的sql语句有所变化
    # 更新
    update语句
    sql = 'update student set name = %s where id = %s'
    cur.execute(sql, ("张三", 4))
    
    # 删除
    sql = 'delete from student where id = %s'
    rs = cur.execute(sql, 4)
    print(rs)
    

sql注入问题

  • sql注入

    '''
    sql注入是一种常见的攻击手段,他利用程序编写的漏洞,用一些特殊符号组合产生特殊的含义,使得正常的sql语句失效,从而脱离正常的业务逻辑,跳过一些验证阶段
    '''
    # 比如说这是一个错误的用法,有sql注入的问题
    sql = "select id,name from user_table where id = %s and name = %s" % (id, name)
    cur.execute(sql)
    
    # 正确的方式
    # execute() 函数本身有接受sql语句参数位的,可以通过python自身的函数处理sql注入问题。
    sql = 'select id,name from user_table where id = %s and name = %s'
    args = (1, "张三")
    cur.execute(sql,args)
    

pymysql的封装

# 来源:https://blog.csdn.net/YZL40514131/article/details/127170427
from pymysql import *

class MysqlHelper:
    # todo 数据库连接参数,可以定义多个,比如conn_params1,conn_params2,用于连接多个数据库,在类实例化时指定
    conn_params = {
        'host': 'localhost',
        'port': 3306,
        'user': 'root',
        'passwd': '123456',
        'db': 'tiam',
        'charset': 'utf8mb4'}

    # todo 类的构造函数,主要用于类的初始化
    def __init__(self, conn_params):
        self.__host = conn_params['host']
        self.__port = conn_params['port']
        self.__db = conn_params['db']
        self.__user = conn_params['user']
        self.__passwd = conn_params['passwd']
        self.__charset = conn_params['charset']

    # todo 建立数据库连接和打开游标
    def __connect(self):
        self.__conn = connect(host=self.__host,
                              port=self.__port,
                              db=self.__db,
                              user=self.__user,
                              passwd=self.__passwd,
                              charset=self.__charset)
        self.__cursor = self.__conn.cursor()

    # todo 关闭游标和关闭连接
    def __close(self):
        self.__cursor.close()
        self.__conn.close()

    # todo 取一条数据
    def get_one(self, sql, params):
        result = None
        try:
            self.__connect()
            self.__cursor.execute(sql, params)
            result = self.__cursor.fetchone()
            self.__close()
        except Exception as e:
            print(e)
        return result

    # todo 取所有数据
    def get_all(self, sql, params):
        lst = ()
        try:
            self.__connect()
            self.__cursor.execute(sql, params)
            lst = self.__cursor.fetchall()
            self.__close()
        except Exception as e:
            print(e)
        return lst

    # todo 增加数据
    def insert(self, sql, params):
        return self.__edit(sql, params)

    # todo 修改数据
    def update(self, sql, params):
        return self.__edit(sql, params)

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

    # todo 写数据操作具体实现,增删改操作都是调用这个方法来实现,这是个私有方法,不允许类外部调用
    def __edit(self, sql, params):
        count = 0
        try:
            self.__connect()
            count = self.__cursor.execute(sql, params)
            self.__conn.commit()
            self.__close()
        except Exception as e:
            print(e)
        return count

封装类的测试

from MysqlHelper import *
import hashlib

# 获取工具类对象
mysqlhelper = MysqlHelper(MysqlHelper.conn_params)

# 查询数据
sql = "select * from user"
result = mysqlhelper.get_all(sql, None)

# todo 获取查询结果条数
print(len(result))

# todo 打印执行结果
for row in result:
    print(row)

# 添加数据
sql = "insert into user values (%s, %s)"
user = input("请输入用户名:")
pwd = input("请输入密码:")
pwd = hashlib.md5(pwd.encode()).hexdigest()
count = mysqlhelper.insert(sql, (user, pwd))
print(count)

# 修改数据
sql = "update user set pwd = %s where user = %s"
count = mysqlhelper.update(sql, ("123456", "s0"))
print(count)

# 删除数据
sql = "delete from user where user = %s"
count = mysqlhelper.delete(sql,"s0")
print(count)

本文作者:愿风带走思绪

本文链接:https://www.cnblogs.com/lsixu/p/18310357

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   愿风带走思绪  阅读(16)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起