欢迎光临散文网 会员登陆 & 注册

0801-项目实验性笔记(1)

2023-08-01 19:41 作者:GHWNM  | 我要投稿

0801

这个项目是针对MySql为中心的

目标是练习MySql语句和pythonMySql交互


流程:使用xly02的爬虫爬取京东数据,但是保存部分改为保存到MySql中

附带目标:如果可以,把这个程序改为MVC架构式


8:49

首先程序不应该把创建数据库的代码放进去,在控制台手动创建一个新数据库和数据表

数据库名:PythonProject01,表名的话就叫jing_dong吧

字段(根据爬虫的程序来,先运行一次保存到exlec里观察数据先):

问题记录1:9:37

在研究了半小时后发现那个报错是因为谷歌浏览器版本的问题,查了半天网上一堆网址没找到ubantu版本的谷歌旧版本dep安装包

还没解决,先放着吧,这数据手动生成吧,表的话新建个表吧,就叫studentsV1(

id int类型 主键 非null 自动增长

name varchar(30)类型

age tinyint类型 无符号

gender 枚举类型("男","女","武装直升机","沃尔玛购物袋")

blibli_id varchar(8)类型

is_delete bit类型,默认值0


11:23

现在字段,sql语句格式,数据生成都弄好了

程序运行能正常执行了,不报错

但是不知道为什么写入部分出错了,sql语句都正常


等下,好像不太对,我在终端里初始值变成了2000起步,正常来讲应该是0开始

程序刚好运行了两次,每次录入1000个

我再运行一次终端看看

果然是这样,似乎程序的sql库和终端的sql库不在同一位面上


11:46

问题找到了,是sql里面的一个自带的功能,是什么事务隔离,下面是GPT的话:

默认情况下,插入数据后终端看不到的原因是MySQL的事务隔离级别设置为REPEATABLE READ(可重复读取)。

这意味着在同一个事务中,后续的查询将会看到之前的快照,而不会看到已经提交的新数据

虽然不是人话,但是反正就是得加两行代码在前面和后面更改隔离级别:


# 设置事务隔离级别为READ COMMITTED

cursor.execute("SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED")

......

# 提交事务

conn.commit()


这样问题就解决......了?

不,但是前面没设置隔离的数据我不知道咋读取或者修改

删也不知道咋删,只好把这个表都删了(

这个项目的第一个寄掉的表,拜拜

重新写一个,这次把创建的代码保存到sublime里

create table studentsV1(

    id int unsigned primary key not null auto_increment,

    name varchar(30),

    age tinyint unsigned default 0,

    gender enum("男","女","武装直升机","沃尔玛购物袋"),

    blibli_id varchar(8),

    is_delete bit default 0

);


好,这个程序的0.1版本可以正式宣布完成了(虽然删除还不行,不知道为啥,下午再研究把,管他呢:D

现在在终端里可以正常看到程序写入的数据了,程序也能正常读取出来了,手都有点抖了

下午就是看看把查询的一些功能做出来了,比如根据名字,ID,性别查询

吃饭时间

---------------------------------------------------------------------------------------------------



14:13

现在可以删除了,原因是因为commit写反了(

得写在执行sql语句的后面,不是前面


15:03

整个程序的View和Controller已经有大体框架了,先做完查询功能

首先是查询的第一部分,根据名字查询

一共可能有三种,精准查询,模糊查询(like),正则查询(rlike)

先用函数判断是不是正则表达式,如果不是就直接like,如果是精准的话反正也能查到对吧

缺点:如果本来就是精准再去like会降低效率,以后再改

有趣的时判断正则的函数是通过re.compile(pattern)这句话来预编译正则的,如果报错就False,没报错就True

这句话感觉有点东西,回头看看能不能用于防止Sql注入


15:24

还是老老实实让用户输入哪种查询方法吧,因为判断正则的那个会把单纯的字符也判断进去,比如我就输入个'王'他也会当成正则找

Controller.find_by_name里面加了个参数mode,决定sql语句拼接是正则,精准,还是模糊


16:24

查询部分做完了,一共三部分,根据姓名查询,根据ID查询和直接输入Sql语句查询

其中Sql语句查询我做了个权限验证的装饰器来装饰

看了下感觉,十分之二三的代码是在防呆瓜,一堆try和错误提醒

数据封装啥的暂时就不做了,毕竟只做了一部分,这时候封装容易害自己

还有一个来小时,可以试试把删除部分也做了,至于增加修改啥的,那就下次罢(


17:06

这个部分也做完了,非常快,因为基本就是直接复制读取的改下返回值,参数和sql语句格式就OK了

(就是有点草率,没怎么测试,以及些部分都不是真正的从物理上删除,而是把is_delete的值改成了1,只有输入神奇小指令GH-1730的时候才会真正删除

但是也加了权限认证,而且不会提示小指令,只要我自己知道)


这个感觉差不多就这样了,今天再看看视频就结束了,这个项目目前节点可以收尾了,至于增加等等就等到jing_dong的那个课程后再继续

到时候估计会大改表的结构,自关联什么的都可以用起来了,今天虽然写了这么多,但是数据框架还是那个studentsV1

还有就是乌云的文件也忒慢了,这东西格式不对不能一次放进去,得每个zip拆开放,最后每次还有错误只能跳过一堆文件

等回头有时间指定给U盘格式化了换格式


0801-项目实验性笔记(1)的评论 (共 条)

分享到微博请遵守国家法律