1. 程式人生 > >mysql與python的互動 pymysql

mysql與python的互動 pymysql

mysql與python的互動 pymysql

主鍵寫0,null,default都自動遞增
不是主鍵,預設,只能寫default

1.拆為多個表

先建立一個新的表 if not exists 如果原來不存在就建立表

寫入:insert into good_cates (name) select good_cates from good group by good_cates;

關聯替換、同步

updata goods as g inner join good_cates as c on g.at_name = c.name
set g.cat_name =

c.id;
兩張表替換了也要替換欄位的名字型別

設外來鍵

alter table good add foreign key(cate_id) references good_cate(id);
取消外來鍵 alter table drop foreign key 外來鍵名稱
極少使用外來鍵,因為表的更新受外來鍵關聯,影響效率

建立插入一氣呵成

2.pymysql

讓寫的程式碼當客戶端寫sql發給server
建立連線connect 獲取遊標cursor(特殊物件用於儲存結果之類的) 記錄了已取了哪些沒有取哪些 遊標
執行命令獲取資料處理資料
關閉遊標
關閉連線

2.1查詢

execute 執行成功返回行數
fetch__查出的是一個元組 execute.fetchall

註冊登入:寫/查

2.2 新增修改刪除

要修改資料庫,所以要提交
commit提交,只有提交了資料庫才會改動
conn.commit()
conn.rollback() 返回取消不提交
但是隻要有execute increment就會遞增

3.防止sql注入

百度一下了解更多 wooyun
不讓使用者拼接字串
pymysql添加了構造引數列表
把要輸入的資料放入列表

sql語句的引數化,可以有效防止sql注入

 安全的方式
    # 構造引數列表
    params = [find_name]
    # 執行select語句,並返回受影響的行數:查詢所有資料
    count = cs1.execute('select * from goods where name=%s', params)
    # 注意:
    # 如果要是有多個引數,需要進行引數化
    # 那麼params = [數值1, 數值2....],此時sql語句中有多個%s即可