学习mysql心得体会及1054、1366等问题解决


前言

因为我们爬虫获取到的数据都是在内存中,是临时的,很容易导致数据丢失,所以为了将我们的数据能够长期的储存下来,我又学习了一些怎么把数据解析后存储入MySQL数据库中。
在学习的过程中遇到了了很多的问题,在文章中也会写到

一、MySQL基本操作

首先我就先去了解了一下pycharm中对MySQL数据库的创建,以及基本功能增删改查进行了一下学习。

1.创建MySQL数据表

在这里插入图片描述
首先是在database中新建一个数据库,并且创建一个新架构“test”
然后便是使用python创建一个“test”下的表。

#1.导包
import pymysql
#2.创建连接对象
# connect = Connection = Connect  本质上是一个函数,使用这三个里边的任何一个函数都可以创建一个连接对象
conn = pymysql.connect(host="localhost",port=3306,user="root",password="****",database="test",charset="utf8")

#3.获取游标  ,目的就是要执行sql语句
cursor = conn.cursor()
# 编写创建表的sql
sql = """
    create table zbj(
    id int primary key auto_increment,
    price double not null,
    title varchar(50) not null,
    chengjiao varchar(30) not null,
    company varchar(30) not null
    );
"""
try:
    #4.执行sql语句
    cursor.execute(sql)
    print("创建成功!")
except Exception as e:
    print(e)
    print("创建失败!")
finally:
    #5.关闭游标
    cursor.close()
    #6.关闭连接
    conn.close()

其实MySQL的建表流程就是这些,主要需要注意的便是sql语句中每一个变量的类型要明确。
以及上边我们自己的用户名,密码要书写。
当然最重要的还是我们既然使用的是数据库,那肯定是已经下载过数据库了的。在这里我就不花时间讲解如何下载数据库了。
根据这六个步骤,我们的表“zbj”就已经建好了。

2.增删改查

sql = "insert into emp values('7874','jask','java','7921','1982-06-11','8000.00','1000.00','30');"
sql = "update emp set ename='super' where empno='7782';"
sql = "delete from emp where empno='7874';"
sql = "select * from t_product;"

使用insert into进行增加数据
使用update …set… 进行更新数据
使用delete from …where… 进行数据删除
使用select … from… 进行数据查询

其中数据查询是最复杂的,不过我们目前不需要掌握那么多,会基础的查询操作就OK了。

二、实战训练

1.数据保存

之前使用xpath的方法爬取了猪八戒网站上的一些信息,所以便试着将其保存在MySQL数据库中,在这个过程中遭遇了很多的问题。最终经过无数次的试错,最终成功存入数据库中。

conn = pymysql.connect(host="localhost",port=3306,user="root",password="2606286762",database="test",charset="utf8mb4")
#3.获取游标  ,目的就是要执行sql语句
cursor = conn.cursor()
for child_data in data:
    #准备sql,之前在mysql客户端如何编写sql,在python程序里边还怎么编写
    sql = '''
                    insert into zbj(
                    price,title,chengjiao,company)
                    values(%s,'%s','%s','%s')''' % (child_data[0],child_data[1],child_data[2],child_data[3])
    # sen = cursor.mogrify('''
    #                 insert into zbj(
    #                 price,title,chengjiao,company)
    #                 values(%s,'%s','%s','%s')''' % (child_data[0],child_data[1],child_data[2],child_data[3]))
    # print(sen)
    # sql = "update emp set ename='super' where empno='7782';"
    # sql = "delete from emp where empno='7874';"
    #插入语句是没有执行结果的。
    #当我们运行程序时我们的语句并没有提交成功,因为我们还需要提交数据给数据库   使用commit
    cursor.execute(sql)
    conn.commit()
cursor.close()
conn.close()
print("over!")

在我们得到了数据后,上方的代码便是进行数据保存步骤,因为我们在之前已经建好了表。我们需要坐的就是把数据插入表中。
在这个过程中碰到了很多的问题:

1.pymysql:1054错误

这个错误是说我们输入的是str类型的数据时,是需要输入引号的。
但是我们的%s ,使用百分号来作为分隔符只会简单地将字符串的内容进行替换,而不会进行自动给字符串加上引号。所以我们只有手动加上引号才可以。
当然,在代码中还有一块这样的内容:

sen = cursor.mogrify('''
                     insert into zbj(
                     price,title,chengjiao,company)
                     values(%s,'%s','%s','%s')''' % (child_data[0],child_data[1],child_data[2],child_data[3]))
print(sen)

这个可以让我们很清晰的看到我们所构造的sql语句,在我们sql运行不成功报错时,我们可以使用cursor.mogrify()函数来快速找出错误所在。

2.pymysql:1366错误

主要就是字符集的问题,因为有中文数据插入时,utf8是无法进行读取的。
所以我们将utf8换成utf8mb4便可以了。当然不仅仅是在charset中更改。
我们还需要进入cmd命令界面汇总更改。
在这里插入图片描述
输入:alter table <表名> convert to character set utf8mb4;
便可以了,这样就能够读取中文了。最终便完成了保存数据到MySQL中。
在这里插入图片描述

2.知识点补充

1.cmd界面MySQL数据库的操作

在cmd中,使用mysql -uroot -p<密码> 进行登陆数据库
然后使用use <库名> 进入到该库中
然后便可以对本数据库进行各种操作。
使用select * from <表名> 可以查询该表中信息
也可以使用 show tables 查看数据库中所有的表

2.数据库的分享

本来想着是想把数据库中的数据能够形成文件导出,但是自己并没有找到怎么导出。不过倒也发现其实在其他pycharm项目中,直接建立表的连接,便可以将在其他项目中建立的表共享到当前项目上。感觉还是很方便的。
在这里插入图片描述

总结

虽然花了很长的时间,但是最终还是能过把这件事情完成,心中还是很开心的,同时又学到了新知识。慢慢来,慢慢的变优秀。
如果有对学习这块比较自律的小伙伴可以评论区留言,自己也想找一个这样的伙伴,一起自律学习。一起努力。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

测开小趴菜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值