pymysql模塊+mysql庫/表備份+事務(鎖)
pymysql模塊
查詢數據
import pymysql
conn=pymysql.connect(host='127.0.0.1',user='root',password='123',database='homework') #host是目標數據庫ip地址,user是數據庫受權用戶,password是用戶密碼,database是數據庫
cur=conn.cursor() #設置遊標 其中括號內能夠寫cursor=pymysql.cursors.DictCorsor,表示查詢的時候輸出爲字典形式
sql='select * from student;' #其中;可加可不加
cur.execute(sql)
ret1=cur.fetchone() #從數據庫取出一行數據
print(ret1)
#(1, '男', 1, '理解')
ret2=cur.fetchmany(10) #從數據庫取出十行數據,注意,前面已經拿出了一個數據,全部會從第二個數據開始取,相似於迭代器
print(ret2)
#((2, '女', 1, '鋼蛋'), (3, '男', 1, '張三'), (4, '男', 1, '張一'), (5, '女', 1, '張二'), (6, '男', 1, '張四'), (7, '女', 2, '鐵錘'), (8, '男', 2, '李三'), (9, '男', 2, '李一'), (10, '女', 2, '李二'), (11, '男', 2, '李四'))
ret3=cur.fetchall() #從數據庫取出全部數據
print(ret3)
#((12, '女', 3, '如花'), (13, '男', 3, '劉三'), (14, '男', 3, '劉一'), (15, '女', 3, '劉二'), (16, '男', 3, '劉四'))
cur.close()
conn.close()
#rowcount:這是一個可讀屬性,能夠查出操做了多少行
import pymysql
conn=pymysql.connect(host='127.0.0.1',user='root',password='123',database='homework')
cur=conn.cursor()
sql='select * from student'
cur.execute(sql)
print(cur.rowcount)
for i in range(cur.rowcount):
print(cur.fetchone())
cur.close()
conn.close()
16
(1, '男', 1, '理解')
(2, '女', 1, '鋼蛋')
(3, '男', 1, '張三')
(4, '男', 1, '張一')
(5, '女', 1, '張二')
(6, '男', 1, '張四')
(7, '女', 2, '鐵錘')
(8, '男', 2, '李三')
(9, '男', 2, '李一')
(10, '女', 2, '李二')
(11, '男', 2, '李四')
(12, '女', 3, '如花')
(13, '男', 3, '劉三')
(14, '男', 3, '劉一')
(15, '女', 3, '劉二')
(16, '男', 3, '劉四')
刪除、修改‘增長數據
import pymysql
conn=pymysql.connect(host='127.0.0.1',user='root',password='123',database='homework')
cur=conn.cursor()
try:
sql='insert into student values(17,"男","1","大黃");' #mysql執行語句 ,注意" "與''的問題
cur.execute(sql)
conn.commit() #這是區別於查詢的地方,得提交命令
except Exception as e:
print(e)
conn.rollback() #若try中數據出現問題,將遊標回滾至開始處,sql語句不生效
cur.close()
conn.close()
sql注入問題
import pymysql
name=input("uesrname:")
pwd=input("password:")
conn=pymysql.connect(host='127.0.0.1',user='root',password='123',database='users')
cur=conn.cursor()
sql='select * from userinfo where name=%s and pwd=%s;' #這裏不能使用"'select * from userinfo where name=%s and pwd=%s'%(name,pwd)",會產生sql注入問題
cur.execute(sql,(name,pwd))
print(cur.fetchone())
cur.close()
conn.close()
pymysql表/庫備份/恢復
表的備份/恢復
#表的備份
#mysqldump -u用戶 -p密碼 -h目標數據庫ip地址 庫.表>存放的絕對地址
C:\Users\81533>mysqldump -uroot -p123 -h127.0.0.1 homework.student>C:\Users\81533\Desktop\mysql_data\student.sql
#表的恢復
mysql>source C:\Users\81533\Desktop\mysql_data\student.sql
庫的備份/恢復
- 庫的重命名通常也能夠採用先備份再刪除原來的庫,而後再備份庫的sql文檔中修改庫名再恢復庫便可
#庫的備份
#mysqldump -uroot -p123 --databases 庫名1,庫名2,....(或者直接--all -databases:表示所有的庫) >目標絕對路徑 注意不加;
C:\Users\81533>mysqldump -uroot -p123 --databases homework>C:\Users\81533\Desktop\mysql_data\homework.sql
#庫的恢復
mysql>source homework>C:\Users\81533\Desktop\mysql_data\homework.sql
事務(鎖)
begin; #開啓事務
select * from student where id=1 forupdate; #for update表示將對這一塊內容進行修改操做,因此數據庫會對其上鎖,組織其餘用戶對這一塊內容進行操做
update student set age=18 where id=1; #對內容進行修改
commit; #提交事務,結束鎖,其餘用戶能夠修改該塊內容