python爬虫day-15(MySQL存储)
2019-04-22 本文已影响0人
南音木
个人学习笔记,方便自己查阅,仅供参考,欢迎交流
MySQL存储
本节其实是靠后的内容,个人翻到比较感兴趣提前看了。
1.链接数据库
host:IP/user:用户名/password:密码/port:运行端口(默认:3306)
#链接数据库,获得版本号。
import pymysql
db = pymysql.connect(host='IP',user='用户名',
password='密码',port = 3306(默认))
cursor = db.cursor()
cursor.execute('SELECT VERSION()')
data = cursor.fetchone()
print('Database version:',data)
db.close()
#输出结果:Database version: ('5.1.73',)
问题:个人数据库,不是本地的,用的是阿里云送的,不知道如何创建数据库。创建一直报错,目前没有找到原因。
2.创建表
#创建一个名为students的数据表
import pymysql
db = pymysql.connect(host='IP',user='用户名',
password='密码',port = 3306(默认),db = '数据库名')
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.插入数据
先构造了一个 SQL 语句,选择直接用格式 %s 来实现。
#插入数据
import pymysql
id = '20190101'
user = 'yunan'
age = '18'
db = pymysql.connect(host='IP',user='用户名',
password='密码',port = 3306(默认),db = '数据库名')
cursor = db.cursor()
sql ='insert into students(id,name,age) values(%s,%s,%s)'
try:
cursor.execute(sql,(id,user,age))
db.commit()
except:
#如果执行失败,调用rollback()执行数据回滚
db.rollback()
db.close()
- 异常处理
如果执行失败,则调用 rollback()执行数据回滚,相当于什么都没有发生过。
事务的4个属性:原子性,一致性,隔离性,持久性。 - 传入一个字典来插入数据
import pymysql
db = pymysql.connect(host='IP',user='用户名',
password='密码',port = 3306(默认),db = '数据库名')
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()
传入的数据是字典,表名定义成变量,构造一个动态的SQL语句。
4.更新数据
- 数据更新操作实际上也是执行 SQL 语句
import pymysql
db = pymysql.connect(host='IP',user='用户名',
password='密码',port = 3306(默认),db = '数据库名')
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()
- 实际爬虫:如果数据存在, 则更新数据;如果数据不存在,则插
入数据。