python爬虫day-15(MySQL存储)

个人学习笔记,方便自己查阅,仅供参考,欢迎交流

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()
  • 实际爬虫:如果数据存在, 则更新数据;如果数据不存在,则插
    入数据。

5.删除操作

7.查询数据

你可能感兴趣的:(python爬虫day-15(MySQL存储))