python爬蟲day-15(MySQL存儲)

個人學(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ù)。

5.刪除操作

7.查詢數(shù)據(jù)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容