pymysql模塊+mysql庫/表備份和恢復+事務(鎖)

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;	#提交事務,結束鎖,其餘用戶能夠修改該塊內容
相關文章
相關標籤/搜索