【爬虫】数据的存储[MySQL]

'''
Author: zh (RickSchanze) (帝皇の惊)
Date: 2022-04-24 22:51:11
Description: 
LastEditTime: 2022-04-28 22:46:34
'''
import pymysql

db = pymysql.connect(host='localhost', user='root',
                     password='20030401zh', port=3306)
cursor = db.cursor()
cursor.execute('SELECT VERSION()')
data = cursor.fetchone()
print('Database version:', data)
cursor.execute(
    "CREATE DATABASE  IF NOT EXISTS spiders DEFAULT CHARACTER SET utf8mb4")
db.close()

# 创建表
# 创建数据库后,在连接后需额外指定一个参数db
db = pymysql.connect(host='localhost', user='root',
                     password='20030401zh', port=3306, db='spiders')
cursor = db.cursor()
sql = 'CREATE TABLE IF NOT EXISTS students (id VARCHAR(255) NOT NULL, name VARCHAR(255) NOT NULL, age INT NOT NULL, PRIMARY KEY (id))'
cursor.execute(sql)
db.close()

# 插入数据
id = '202130279'
user = 'zhouhao'
age = 20
db = pymysql.connect(host='localhost', user='root',
                     password='20030401zh', port=3306, db='spiders')
cursor = db.cursor()
sql = 'INSERT INTO students(id, name, age) values(%ss, %ss, %ss)'
try:
    cursor.execute(sql, (id, user, age))
    db.commit()
except:
    db.rollback()
db.close()

# 改写插入数据,动态插入
db = pymysql.connect(host='localhost', user='root',
                     password='20030401zh', port=3306, db='spiders')
data = {
    'id': '2012001',
    'name': ' Bob',
    'age': 20
}
table = 'students'
keys = ', '.join(data.keys())
values = ', '.join(['%s'] * len(data))
sql = f'INSERT INTO {table}({keys}) VALUES ({values})'
try:
    cursor = db.cursor()
    if cursor.execute(sql, tuple(data.values())):
        print('Successful')
        db.commit()
except Exception as e:
    print(e)
    print('failed')
    db.rollback()
db.close()

# 更新数据
db = pymysql.connect(host='localhost', user='root',
                     password='20030401zh', port=3306, db='spiders')
sql = 'UPDATE students SET age = %s WHERE name = %s'
try:
    cursor = db.cursor()
    cursor.execute(sql, (25, 'Bob'))
    db.commit()
    print("success")
except Exception as e:
    print(e)
    db.rollback()
    print("failed")
db.close()

# 动态更新
db = pymysql.connect(host='localhost', user='root',
                     password='20030401zh', port=3306, db='spiders')
data = {
    "id": "20120001",
    "name": "Bob",
    "age": 21
}

table = 'students'
keys = ', '.join(data.keys())
values = ', '.join(['%s'] * len(data))

sql = f'INSERT INTO {table}({keys}) VALUES ({values}) ON DUPLICATE KEY UPDATE '
update = ','.join(["{key} = %s".format(key=key) for key in data])
sql += update
try:
    cursor = db.cursor()
    if cursor.execute(sql, tuple(data.values()) * 2):
        print("successfully")
except Exception as e:
    print(e)
    print(106)
    db.rollback()
db.close()

# 删除数据
db = pymysql.connect(host='localhost', user='root',
                     password='20030401zh', port=3306, db='spiders')
table = 'students'
condition = 'age < 20'
sql = 'DELETE FROM {table} WHERE {condition}'.format(
    table=table, condition=condition)
try:
    cursor = db.cursor()
    cursor.execute(sql)
    db.commit()
    print("success")
except Exception as e:
    print(e)

# 查询数据
sql = 'SELECT * FROM students WHERE age >= 20'
db = pymysql.connect(host='localhost', user='root',
                     password='20030401zh', port=3306, db='spiders')
try:
    cursor = db.cursor()
    cursor.execute(sql)
    print("Count", cursor.rowcount)
    one = cursor.fetchone()
    print("One:", one)
    results = cursor.fetchall()
    print("Results:", results)
    print("Result Type", type(results))
    for row in results:
        print(row)
except Exception as e:
    print(e)
db.close()

  

posted @ 2022-04-28 22:49  帝皇の惊  阅读(21)  评论(0)    收藏  举报