0801-項目實驗性筆記(1)
0801
這個項目是針對MySql為中心的
目標(biāo)是練習(xí)MySql語句和pythonMySql交互
流程:使用xly02的爬蟲爬取京東數(shù)據(jù),但是保存部分改為保存到MySql中
附帶目標(biāo):如果可以,把這個程序改為MVC架構(gòu)式
8:49
首先程序不應(yīng)該把創(chuàng)建數(shù)據(jù)庫的代碼放進(jìn)去,在控制臺手動創(chuàng)建一個新數(shù)據(jù)庫和數(shù)據(jù)表
數(shù)據(jù)庫名:PythonProject01,表名的話就叫jing_dong吧
字段(根據(jù)爬蟲的程序來,先運(yùn)行一次保存到exlec里觀察數(shù)據(jù)先):
問題記錄1:9:37
在研究了半小時后發(fā)現(xiàn)那個報錯是因為谷歌瀏覽器版本的問題,查了半天網(wǎng)上一堆網(wǎng)址沒找到ubantu版本的谷歌舊版本dep安裝包
還沒解決,先放著吧,這數(shù)據(jù)手動生成吧,表的話新建個表吧,就叫studentsV1(
id int類型 主鍵 非null 自動增長
name varchar(30)類型
age tinyint類型 無符號
gender 枚舉類型("男","女","武裝直升機(jī)","沃爾瑪購物袋")
blibli_id varchar(8)類型
is_delete bit類型,默認(rèn)值0
11:23
現(xiàn)在字段,sql語句格式,數(shù)據(jù)生成都弄好了
程序運(yùn)行能正常執(zhí)行了,不報錯
但是不知道為什么寫入部分出錯了,sql語句都正常
等下,好像不太對,我在終端里初始值變成了2000起步,正常來講應(yīng)該是0開始
程序剛好運(yùn)行了兩次,每次錄入1000個
我再運(yùn)行一次終端看看
果然是這樣,似乎程序的sql庫和終端的sql庫不在同一位面上
11:46
問題找到了,是sql里面的一個自帶的功能,是什么事務(wù)隔離,下面是GPT的話:
默認(rèn)情況下,插入數(shù)據(jù)后終端看不到的原因是MySQL的事務(wù)隔離級別設(shè)置為REPEATABLE READ(可重復(fù)讀?。?。
這意味著在同一個事務(wù)中,后續(xù)的查詢將會看到之前的快照,而不會看到已經(jīng)提交的新數(shù)據(jù)
雖然不是人話,但是反正就是得加兩行代碼在前面和后面更改隔離級別:
# 設(shè)置事務(wù)隔離級別為READ COMMITTED
cursor.execute("SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED")
......
# 提交事務(wù)
conn.commit()
這樣問題就解決......了?
不,但是前面沒設(shè)置隔離的數(shù)據(jù)我不知道咋讀取或者修改
刪也不知道咋刪,只好把這個表都刪了(
這個項目的第一個寄掉的表,拜拜
重新寫一個,這次把創(chuàng)建的代碼保存到sublime里
create table studentsV1(
? ? id int unsigned primary key not null auto_increment,
? ? name varchar(30),
? ? age tinyint unsigned default 0,
? ? gender enum("男","女","武裝直升機(jī)","沃爾瑪購物袋"),
? ? blibli_id varchar(8),
? ? is_delete bit default 0
);
好,這個程序的0.1版本可以正式宣布完成了(雖然刪除還不行,不知道為啥,下午再研究把,管他呢:D
現(xiàn)在在終端里可以正??吹匠绦?qū)懭氲臄?shù)據(jù)了,程序也能正常讀取出來了,手都有點(diǎn)抖了
下午就是看看把查詢的一些功能做出來了,比如根據(jù)名字,ID,性別查詢
吃飯時間
---------------------------------------------------------------------------------------------------
14:13
現(xiàn)在可以刪除了,原因是因為commit寫反了(
得寫在執(zhí)行sql語句的后面,不是前面
15:03
整個程序的View和Controller已經(jīng)有大體框架了,先做完查詢功能
首先是查詢的第一部分,根據(jù)名字查詢
一共可能有三種,精準(zhǔn)查詢,模糊查詢(like),正則查詢(rlike)
先用函數(shù)判斷是不是正則表達(dá)式,如果不是就直接like,如果是精準(zhǔn)的話反正也能查到對吧
缺點(diǎn):如果本來就是精準(zhǔn)再去like會降低效率,以后再改
有趣的時判斷正則的函數(shù)是通過re.compile(pattern)這句話來預(yù)編譯正則的,如果報錯就False,沒報錯就True
這句話感覺有點(diǎn)東西,回頭看看能不能用于防止Sql注入
15:24
還是老老實實讓用戶輸入哪種查詢方法吧,因為判斷正則的那個會把單純的字符也判斷進(jìn)去,比如我就輸入個'王'他也會當(dāng)成正則找
Controller.find_by_name里面加了個參數(shù)mode,決定sql語句拼接是正則,精準(zhǔn),還是模糊
16:24
查詢部分做完了,一共三部分,根據(jù)姓名查詢,根據(jù)ID查詢和直接輸入Sql語句查詢
其中Sql語句查詢我做了個權(quán)限驗證的裝飾器來裝飾
看了下感覺,十分之二三的代碼是在防呆瓜,一堆try和錯誤提醒
數(shù)據(jù)封裝啥的暫時就不做了,畢竟只做了一部分,這時候封裝容易害自己
還有一個來小時,可以試試把刪除部分也做了,至于增加修改啥的,那就下次罷(
17:06
這個部分也做完了,非??欤驗榛揪褪侵苯訌?fù)制讀取的改下返回值,參數(shù)和sql語句格式就OK了
(就是有點(diǎn)草率,沒怎么測試,以及些部分都不是真正的從物理上刪除,而是把is_delete的值改成了1,只有輸入神奇小指令GH-1730的時候才會真正刪除
但是也加了權(quán)限認(rèn)證,而且不會提示小指令,只要我自己知道)
這個感覺差不多就這樣了,今天再看看視頻就結(jié)束了,這個項目目前節(jié)點(diǎn)可以收尾了,至于增加等等就等到j(luò)ing_dong的那個課程后再繼續(xù)
到時候估計會大改表的結(jié)構(gòu),自關(guān)聯(lián)什么的都可以用起來了,今天雖然寫了這么多,但是數(shù)據(jù)框架還是那個studentsV1
還有就是烏云的文件也忒慢了,這東西格式不對不能一次放進(jìn)去,得每個zip拆開放,最后每次還有錯誤只能跳過一堆文件
等回頭有時間指定給U盤格式化了換格式