Python关系型数据库存储(MySQL的存储)

数据存储(MySQL的存储)

  • 需要安装MySQL数据库并保证运行。
  • 需要安装好PyMySQL库。

1.连接数据库

import pymysql
# 使用connect()方法声明一个MySQL连接对象
db = pymysql.connect(host='localhost', user='root', password='020814', port=3306)
# 调用cursor()方法获得MySQL的操作游标
cursor = db.cursor()
# execute()方法用来执行SQL语句
cursor.execute('select version()')
# fetchone()方法用来获取执行后的第一条数据
data = cursor.fetchone()
print('Database Version:', data)
# 创建一个spiders数据库
cursor.execute('create database spiders default character set utf8')
db.close()

2.创建表

import pymysql
# 声明一个连接对象
db = pymysql.connect(host='localhost', user='root', password='020814', port=3306, db='spiders')
# 获得MySQL操作游标
cursor = db.cursor()
# 编写SQL语句
sql = 'create table if not exists students(id varchar(255) not null, name varchar(255) not null, age int not null, primary key(id))'
# 执行SQL语句
cursor.execute(sql)
db.close()

3.插入数据

import pymysql
id = '170123060341'
user = 'chenjiahe'
age = 21
db = pymysql.connect(host='localhost', user='root', password='020814', port=3306, db='spiders')
cursor = db.cursor()
# %s为格式化符,有几个value就写几个%s
sql = 'insert into students(id, name, age) values(%s, %s, %s)'
try:
    # 第一个参数为SQL语句,value值用元组传过来
    cursor.execute(sql, (id, user, age))
    # 执行数据库对象的commit()方法才可以实现插入(插入、更新、删除都需要调用该方法)
    db.commit()
except:
    # 如果执行失败,则数据回滚
    db.rollback()
db.close()

传入动态化字典,构造通用的插入方法:

import pymysql
# 构造一个可以动态变化的字典
data = {
    
    
    'id': '170123060341',
    'user': 'chenjiahe',
    'age': 21
}
db = pymysql.connect(host='localhost', user='root', password='020814', port=3306, db='spiders')
cursor = db.cursor()
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)
try:
    if cursor.execute(sql, tuple(data.values())):
        print('Successful')
        db.commit()
except:
    print('Failed')
    db.rollback()
db.close()

事务:
插入、更新和删除操作都是对数据库进行更改的操作,而更改操作都必须为一个事务,这些操作的标准写法是:

try:
    cursor.execute(sql)
    db.commit()
except:
    db.rollback()        

4.更新数据

import pymysql
db = pymysql.connect(host='localhost', user='root', password='020814', port=3306, db='spiders')
cursor = db.cursor()

"""
更新数据
"""
data = {
    
    
    'id': '19981024',
    'name': 'maxin',
    'age': '21'
}
table = 'students'
keys = ','.join(data.keys())
values = ','.join(['%s'] * len(data))
# 如果数据存在,就更新它;如果数据不存在,就插入数据。
# insert into students(id, name, age) values(%s, %s, %s) on duplicate key update id = %s, name = %s, age = %s
sql = 'insert into {table}({keys}) values({values}) on duplicate key update'.format(table=table, keys=keys, values=values)
update = ','.join([" {key} = %s".format(key=key) for key in data])
sql += update
try:
    if cursor.execute(sql, tuple(data.values())*2):
        print('Successful')
        db.commit()
except:
    print('Failed')
    db.rollback()
db.close()

5.删除数据
删除操作直接使用delete语句即可。但是需要指定要删除的目标表名和删除条件。

import pymysql
db = pymysql.connect(host='localhost', user='root', password='020814', port=3306, db='spiders')
cursor = db.cursor()
# 指定要删除的表名与条件(删除students表中的age大于20的数据)
table = 'students'
condition = 'age > 20'

sql = 'delete from {table} where {condition}'.format(table=table, condition=condition)
try:
    cursor.execute(sql)
    db.commit()
except:
    db.rollback()
    
db.close()

6.查询数据

import pymysql
db = pymysql.connect(host='localhost', user='root', password='020814', port=3306, db='spiders')
cursor = db.cursor()
sql = 'select * from students where age >=20'
try:
    cursor.execute(sql)
    # 打印查询结果的条数
    print('Count:', cursor.rowcount)
    
    # 调用fetchone()方法可以获取结果的第一条数据,返回结果为元组形式
    one = cursor.fetchone()
    print('One:', one)
    
    # 调用fetchall()方法可以获取结果的所有数据,返回结果为二重元组,每个元素都是一条记录,可以将其遍历输出
    results = cursor.fetchall()
    for row in results:
        print(row)
except:
    print('Error')

注意:因为我们最开始调用了一次fetchone()方法,因此结果的偏移指针就指向下一条数据,然后再调用fetchall()方法返回的结果是偏移指针正指向的数据一直到结束的所有数据。
比如,有4条数据,先调用fetchone()方法获取了第一条数据,然后使用fetchall()方法获取所有的结果就是第二条数据到第四条数据了。

使用while循环加fetchone()方法来获取所有数据:

import pymysql
db = pymysql.connect(host='localhost', user='root', password='020814', port=3306, db='spiders')
cursor = db.cursor()
sql = 'select * from students where age >=20'
try:
    cursor.execute(sql)
    row = cursor.fetchone()
    while row:
        # 每循环一次,指针就会偏移一条数据
        print('Row:', row)
        row = cursor.fetchone()
except:
    print('Error')

猜你喜欢

转载自blog.csdn.net/weixin_43670190/article/details/106611057