py操作MySQL以及解决乱码问题的记录

写在前面

做py操作MySQL的原因是自己做着玩的项目需要:wepy微信机器人:向好友推送爬取的公告,里面涉及到保存用户的信息,以前图简单,直接放入一个列表内,一旦想优化一下代码,程序重启,用户信息就没了。所以就想着写个数据库保存用户的信息。以前也使用过一些语言操作MySQL:PHP、Java等。其实都一样,所以py上手也很快。

py操作MySQL

注:本小节内容几乎完全引用的此博客:python-入门教程(操作mysql数据库),但是自己还是写一写

pymysql安装

  1. cmd内直接pip install pymysql
  2. pyCharm内引入时Alt+Enter安装易可

代码示例

关于库也没啥好介绍的,直接上代码,下面是增删改查的示例,看了就知道库的用法了。唯一不熟悉的可能就是SQL语句了,但这也跟python无关,想要找对应的SQL语句可以去对应百度一下,但下面几条应该够用了。

查询操作

import pymysql  #导入 pymysql

#打开数据库连接,原博客端口是3307
db= pymysql.connect(host="localhost",user="root",password="123456",db="test",port=3306)

# 使用cursor()方法获取操作游标
cur = db.cursor()

#1.查询操作
# 编写sql 查询语句  user 对应我的表名
sql = "select * from user"
try:
    cur.execute(sql)     #执行sql语句

    results = cur.fetchall()    #获取查询的所有记录
    print("id","name","password")
    #遍历结果
    for row in results :
        id = row[0]
        name = row[1]
        password = row[2]
        print(id,name,password)
except Exception as e:
    raise e
finally:
    db.close()    #关闭连接

插入操作

注:我个人习惯,一般把id设置为主键并且自动递增,所以我的SQL语句里面不会指定id。

import pymysql
#2.插入操作
db= pymysql.connect(host="localhost",user="root",password="123456",db="test",port=3306)

# 使用cursor()方法获取操作游标
cur = db.cursor()

sql_insert ="insert into user(id,username,password) values(4,'liu','1234')"

try:
    cur.execute(sql_insert)
    #提交,这句执行才能在数据库内看到记录
    db.commit()
except Exception as e:
    #错误回滚
    db.rollback() 
finally:
    db.close()

更新操作

更新操作
db= pymysql.connect(host="localhost",user="root",password="123456",db="test",port=3306)

# 使用cursor()方法获取操作游标
cur = db.cursor()

sql_update ="update user set username = '%s' where id = %d"

try:
    cur.execute(sql_update % ("xiongda",3))  #像sql语句传递参数
    #提交
    db.commit()
except Exception as e:
    #错误回滚
    db.rollback() 
finally:
    db.close()

删除

import pymysql
#4.删除操作
db= pymysql.connect(host="localhost",user="root",password="123456",db="test",port=3306)

# 使用cursor()方法获取操作游标
cur = db.cursor()

sql_delete ="delete from user where id = %d"

try:
    cur.execute(sql_delete % (3))  #像sql语句传递参数
    #提交
    db.commit()
except Exception as e:
    #错误回滚
    db.rollback() 
finally:
    db.close()

连接远程数据库

一开始直接把"localhost"改成服务器的IP,报错了。

db= pymysql.connect(host="localhost",user="root",password="123456",db="test",port=3306)

可能的问题有两个:
1.服务器防火墙拦截请求:先去服务器官网的控制台设置安全组开放端口;这种情况有可能还是访问不了,网上说还要去服务器上去设置防火墙的进、出站规则,我为了省事,直接就把防火墙关了。
2.数据库权限问题:数据库默认设置是只能"localhost"访问的,可以打开数据库“mysql”,打开数据表“user”查看用户权限(如下)
在这里插入图片描述
解决方法也有多种,比如添加新的远程的用户。较简单的方法就是把root用户的host从"localhost"改为"%",代表ALL,接受任意IP的请求。在命令行内执行操作:

mysql -u root -p 
//打开数据库“mysql”
mysql>use mysql;
//执行SQL语句,进行替换
mysql>update user set host = '%' where user = 'root';
//看下结果
mysql>select host, user from user;

这样应该就没问题了。

记录: 乱码问题解决!!!

起因(废话请跳过):

白天代码要爬公告不敢停,专门抽晚上的时间升级代码。整个代码写好并且在电脑上调试好,大概4点了,心满意足的准备部署到服务器睡觉。嘿嘿,服务器上调试的时候,突然出现了下图这样一条数据(id+用户名):中文乱码!而且这个用户已经在数据库内了(因为中文乱码,用户重复了),人傻了。
在这里插入图片描述
然后去网上找解决方法,几乎都找遍了,都没用!一直调到了早上7点半,还是没解决。10点要上班,就把先前的用户信息写到一个固定的列表内,写了一个低配版本的脚本,白天先运行。赶紧睡了两小时,好在当天晚上最终解决了问题。
我的问题总结:

  1. 服务器MySQL编码有问题
  2. 服务器navicat编码有问题

乱码的来源

先归纳,乱码的来源就三个地方:

  1. 代码内提交数据编码问题
  2. 数据库编码
  3. navicat编码问题!!

1.代码内的编码问题
可以参考下面两篇博客:(我没有这个问题)
Python读取mysql数据库数据出现中文乱码
(冲突)Python中使用pymysql插入中文数据问题
2.数据库编码问题
我最开始检查了我服务器mysql的编码,确实有问题。MySQL的默认编码并不是utf-8。
可以看下面这篇博客:
mysql字符编码的设置以及mysql中文乱码的解决方法
还有个简单暴力的方法是直接删了重装:附一个菜鸟教程的安装教程。重装还是比较快的:
MySQL安装
3.navicat编码问题
其实网上基本上是对前两个问题的解答,我几乎所有操作都搞了好几遍,数据库也删了重装了n次,服务器的navicat内还是几个???。最后我干脆控制变量,一个个试,用了本地的程序,本地的navicat,只有MySQL用的是服务器的,结果发现:没有问题!!!。然后我分别用服务器的navicat和本地的navicat连接MySQL,发现效果如下:
在这里插入图片描述
所以此时其实代码和数据库都是没问题的,其实只是navicat显示的问题,完全不影响业务。(暴风哭泣.jpg)
那么怎么解决这个显示问题呢?
在navicat连接属性内=>高级=>编码,选择“自动”即可。
在这里插入图片描述

写在后面

记录学习,欢迎交流,多多指教

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
【优质项目推荐】 1、项目代码均经过严格本地测试,运行OK,确保功能稳定后才上传平台。可放心下载并立即投入使用,若遇到任何使用问题,随时欢迎私信反馈与沟通,博主会第一时间回复。 2、项目适用于计算机相关专业(如计科、信息安全、数据科学、人工智能、通信、物联网、自动化、电子信息等)的在校学生、专业教师,或企业员工,小白入门等都适用。 3、该项目不仅具有很高的学习借鉴价值,对于初学者来说,也是入门进阶的绝佳选择;当然也可以直接用于 毕设、课设、期末大作业或项目初期立项演示等。 3、开放创新:如果您有一定基础,且热爱探索钻研,可以在此代码基础上二次开发,进行修改、扩展,创造出属于自己的独特应用。 欢迎下载使用优质资源!欢迎借鉴使用,并欢迎学习交流,共同探索编程的无穷魅力! 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip 基于业务逻辑生成特征变量python实现源码+数据集+超详细注释.zip
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值