一、pymysql模組:其實就是提供了socket客戶端和mysql服務端的通訊介面
1、發起連線
# conn=pymysql.connect(
# host='127.0.0.1', #也就是服務端位址
# port=3306, #埠號就是3306
# user='root', #使用者名稱
# password='', #使用者名稱對應的密碼
# database='day45',
# charset='utf8'
# )#就相當於cmd中登入mysql
2、拿到游標:
》cur=conn.cursor() #拿到游標cur
》游標就是cmd中的mysql>節點,用來執行mysql命令的
這裡的cur指的是游標。游標是對映在結果集中一行資料上的位置實體,有了游標,使用者就可以訪問結果集中的任意一行資料了,將游標放置到某行後,即可對該行資料進行操作。然而這些都是mysql內部的事情了,我們只需要知道要寫上這麼兩句話,在執行sql語句前例項化乙個游標物件,並在執行完sql語句提交後,關掉這個游標就好了。
3、增刪改操作:
(1)字串表示mysql語句增加記錄,注意要加分號的
》使用字串變數表示mysql語句:insert_sql='insert into userinfo(user,password) values("%s","%s");' %('yh','123')
》可以直接cur.execute('mysql語句')去執行
》通常採用呼叫excute函式將命令發給mysql:cur.execute(insert_sql)
》注意此時mysql並不會立刻執行命令
(2)下面這種方法佔位符不用加引號,execute函式會幫我們處理,注意是元組的形式
》insert_sql='insert into userinfo(user,password) values(%s,%s);'
》cur.execute(insert_sql,('evia1','1234')) 元組形式
(3)這種方法就是一次性新增多條記錄,注意是列表形式,列表中是元組
》cur.executemany(insert_sql,[('evia2','1234'),('evia3','1234'),('evia4','1234')])
#原來是我們對sql進行字串拼接
#sql="select * from userinfo where name='%s' and password='%s'" %(user,pwd)
#print(sql)
#res=cursor.execute(sql)
#改寫為(execute幫我們做字串拼接,我們無需且一定不能再為%s加引號了)
sql="
select * from userinfo where name=%s and password=%s"#
!!!注意%s需要去掉引號,因為pymysql會自動為我們加上
res=cursor.execute(sql,[user,pwd]) #
pymysql模組自動幫我們解決sql注入的問題,只要我們按照pymysql的規矩來。
4、查詢操作
(1)同樣也是呼叫excute函式執行,一定要注意mysql是不會立刻執行這條語句的
》rows=cur.execute('select * from userinfo where 1 = 2;')
(2)拿到的rows是查詢記錄結果的個數,所以是數字,並不是mysql中顯示出的結果,增刪改操作也是一樣的
》rows=cur.execute('select * from userinfo;')
5.執行命令
》要想在mysql執行上面輸入的mysql語句,必須呼叫commit函式
con.commit()mysql就會執行傳送過來的命令
6、檢視結果:結果都是以元組的形式返回的
》cur.fetchone() 執行一次取第乙個結果,再次輸入cur.fetchone()後又會拿到第二個結果,和生成器的next方法類似
》cur.fetchall() 一次取出所有的結果,預設是以元組輸出的
》cur.fetchmany(2)取前2條結果
7、關閉
》執行完整個流程後,要把游標和連線關閉
》cur.close()
》con.close()
importpymysql#鏈結
conn=pymysql.connect(host='
localhost
',user='
root
',password='
123',database='
egon')
#游標cursor=conn.cursor()
#執行sql語句
#part1
#sql='insert into userinfo(name,password) values("root","123456");'
#res=cursor.execute(sql) #執行sql語句,返回sql影響成功的行數
#print(res)
#part2
#sql='insert into userinfo(name,password) values(%s,%s);'
#res=cursor.execute(sql,("root","123456")) #執行sql語句,返回sql影響成功的行數
#print(res)
#part3
sql='
insert into userinfo(name,password) values(%s,%s);
'res=cursor.executemany(sql,[("
root
","123456
"),("
lhf","
12356
"),("
eee","
156")]) #
執行sql語句,返回sql影響成功的行數
(res)
conn.commit()
#提交後才發現表中插入記錄成功
cursor.close()
conn.close()
importpymysql#鏈結
conn=pymysql.connect(host='
localhost
',user='
root
',password='
123',database='
egon')
#游標cursor=conn.cursor()
#執行sql語句
sql='
select * from userinfo;
'rows=cursor.execute(sql) #
執行sql語句,返回sql影響成功的行數rows,將結果放入乙個集合,等待被查詢
#cursor.scroll(3,mode='absolute') # 相對絕對位置移動
#cursor.scroll(3,mode='relative') # 相對當前位置移動
res1=cursor.fetchone()
res2=cursor.fetchone()
res3=cursor.fetchone()
res4=cursor.fetchmany(2)
res5=cursor.fetchall()
(res1)
(res2)
(res3)
(res4)
(res5)
print('
%s rows in set (0.00 sec)
' %rows)
conn.commit()
#提交後才發現表中插入記錄成功
cursor.close()
conn.close()
'''(1, 'root', '123456')
(2, 'root', '123456')
(3, 'root', '123456')
((4, 'root', '123456'), (5, 'root', '123456'))
((6, 'root', '123456'), (7, 'lhf', '12356'), (8, 'eee', '156'))
rows in set (0.00 sec)
'''
10月30日學習內容整理 pymysql模組補充
1 sql注入 以使用者登入為例,利用mysql中 兩個橫槓注釋的功能,可以在輸入使用者名稱的時候在後面加上 這樣就將密碼隱藏甚至加上其它邏輯運算使得使用者名稱也可以被隱藏,這樣就導致資料庫很容易就被破解。像這樣改變查詢邏輯的做法就是sql注入 為了規避這種風險,我們通常使用execute函式來做字...
9月26日學習內容整理 TCP協議的粘包現象
一 粘包現象的由來 tcp俗稱流式協議,源源不斷的傳送資料 但是tcp協議有個特點,就是會把間隔時間很短並且資料量較小的一些資料合為乙個大資料進行傳送 這個特點對於傳送端來說,如果連續傳送幾個資料量很小的資料流,那麼tcp就會將它們合為乙個大資料,接收端收到這個大資料就會不知道怎麼解析,分不清資料的...
10月26日 周二 晴
天氣預報說今天有颱風,天氣將降溫。一早醒來,風和日麗,陽光明媚,是否是山雨欲來風滿樓?心情很是惆悵,雖然考完試了,輕鬆了不少,但是生活依舊煩悶,雖然每天仍是笑聲爽朗。我離開了莊,儘管不捨,但仍是義無反顧。每每想起心便是鈍鈍的疼,我是個好女孩,但是為何幸福離我那般遠?人是不是都很賤,容易到手的東西就是...