0801-项目实验性笔记(1)
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盘格式化了换格式