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 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix