個人學(xué)習(xí)筆記,方便自己查閱,僅供參考,歡迎交流
MySQL存儲
本節(jié)其實是靠后的內(nèi)容,個人翻到比較感興趣提前看了。
1.鏈接數(shù)據(jù)庫
host:IP/user:用戶名/password:密碼/port:運行端口(默認(rèn):3306)
#鏈接數(shù)據(jù)庫,獲得版本號。
import pymysql
db = pymysql.connect(host='IP',user='用戶名',
password='密碼',port = 3306(默認(rèn)))
cursor = db.cursor()
cursor.execute('SELECT VERSION()')
data = cursor.fetchone()
print('Database version:',data)
db.close()
#輸出結(jié)果:Database version: ('5.1.73',)
問題:個人數(shù)據(jù)庫,不是本地的,用的是阿里云送的,不知道如何創(chuàng)建數(shù)據(jù)庫。創(chuàng)建一直報錯,目前沒有找到原因。
2.創(chuàng)建表
#創(chuàng)建一個名為students的數(shù)據(jù)表
import pymysql
db = pymysql.connect(host='IP',user='用戶名',
password='密碼',port = 3306(默認(rèn)),db = '數(shù)據(jù)庫名')
cursor = db.cursor()
sql = 'create table if not exists students (id varchar(36) not null,\
name varchar(36) not null,age int not null ,primary key(id) )'
cursor.execute(sql)
db.close()
3.插入數(shù)據(jù)
先構(gòu)造了一個 SQL 語句,選擇直接用格式 %s 來實現(xiàn)。
#插入數(shù)據(jù)
import pymysql
id = '20190101'
user = 'yunan'
age = '18'
db = pymysql.connect(host='IP',user='用戶名',
password='密碼',port = 3306(默認(rèn)),db = '數(shù)據(jù)庫名')
cursor = db.cursor()
sql ='insert into students(id,name,age) values(%s,%s,%s)'
try:
cursor.execute(sql,(id,user,age))
db.commit()
except:
#如果執(zhí)行失敗,調(diào)用rollback()執(zhí)行數(shù)據(jù)回滾
db.rollback()
db.close()
- 異常處理
如果執(zhí)行失敗,則調(diào)用 rollback()執(zhí)行數(shù)據(jù)回滾,相當(dāng)于什么都沒有發(fā)生過。
事務(wù)的4個屬性:原子性,一致性,隔離性,持久性。 - 傳入一個字典來插入數(shù)據(jù)
import pymysql
db = pymysql.connect(host='IP',user='用戶名',
password='密碼',port = 3306(默認(rèn)),db = '數(shù)據(jù)庫名')
cursor = db.cursor()
data = {
'id':'20190104',
'name':'fengzi',
'age':'18'
}
table ='students'
keys =','.join(data.keys())
values =','.join(['%s']*len(data))
sql = 'INSERT INTO {table}({keys}) VALUES ({values})'.\
format(table=table,keys=keys,values=values)
print (sql)
try:
if cursor.execute(sql,tuple(data.values())):
print('Successful')
db.commit()
except:
print('Failed')
db.rollback()
db.close()
傳入的數(shù)據(jù)是字典,表名定義成變量,構(gòu)造一個動態(tài)的SQL語句。
4.更新數(shù)據(jù)
- 數(shù)據(jù)更新操作實際上也是執(zhí)行 SQL 語句
import pymysql
db = pymysql.connect(host='IP',user='用戶名',
password='密碼',port = 3306(默認(rèn)),db = '數(shù)據(jù)庫名')
cursor = db.cursor()
sql = 'UPDATE students SET age =%s WHERE name =%s'
try :
cursor.execute(sql,(25,'cike'))
db.commit()
except:
db.rollback()
db.close()
- 實際爬蟲:如果數(shù)據(jù)存在, 則更新數(shù)據(jù);如果數(shù)據(jù)不存在,則插
入數(shù)據(jù)。