关系型数据库存储mysql

pymysql

# -*- coding: utf-8 -*-
# @Time : 2021/12/26 21:35
# @Author :liuw
# @File : mysql.py
# @Software: PyCharm

#关系型数据库 mysql
import pymysql
print(pymysql.VERSION)
# db = pymysql.connect(host='localhost',user='root',password='admin456_LW!',port=3306)
# cursor = db.cursor() #获得mysql的操作游标
# cursor.execute('SELECT VERSION()')
# data = cursor.fetchone()#获得第一条数据,得到版本号
# print('Database version:',data)

# cursor.execute("CREATE DATABASE spiders DEFAULT CHARACTER SET utf8")
# db.close()

#3.开始创建表格
# db = pymysql.connect(host='localhost', user='root', password='admin456_LW!', 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()
# 运行之后,我们便创建了一个sudents的数据表
#4.创建数据
#
# id = '20120001'
# user = 'Bob'
# age = 20
#
# db = pymysql.connect(host='localhost', user='root', password='admin456_LW!', port=3306, db='spiders')
# cursor = db.cursor()
# sql = 'INSERT INTO students(id, name, age) values(% s, % s, % s)'
# try:
#     cursor.execute(sql, (id, user, age))
#     db.commit()#该方法为事务的实现提供了支持
# except:
#     db.rollback() #如果执行失败,调用该方法执行数据回滚,相当于什么都没有发生
# db.close()

#以上数据的插入操作存在一个问题,突然增加了性别字段,sql语句就需要进行修改,我们需要做成效果是插入方法无法改动,
# 做成一个通用方法,只需要传入动态变化的字典即可,进行构造一个字典
# db = pymysql.connect(host='localhost', user='root', password='admin456_LW!', port=3306, db='spiders')
# cursor = db.cursor()
# data = {
#     'id':'20120002',
#     'name':'liuw',
#     'age':20
# }
# table = 'students'
# keys = ', '.join(data.keys()) #结果就是 id, name, age
# # 这里有三个字段,就需要构造 % s, % s, % s。这里首先定义了长度为 1 的数组 ['% s'],然后用乘法将其扩充为 ['% s', '% s', '% s'],再调用 join 方法,最终变成 % s, % s, % s
# 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()

'''
5.数据更新操作
'''
# db = pymysql.connect(host='localhost', user='root', password='admin456_LW!', port=3306, db='spiders')
# cursor = db.cursor()
# data = {
#     'id': '20120001',
#     'name': 'Bob',
#     'age': 21
# }
#
# table = 'students'
# keys = ', '.join(data.keys())
# values = ', '.join(['%s'] * len(data))
# #如果主键已经存在 执行更新操作
# 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:
#     #这里变成6个%s 实现主键不存在便插入数据,存在则更新数据的功能
#     if cursor.execute(sql, tuple(data.values())*2):
#         print('Successful')
#         db.commit()
# except:
#     print('Failed')
#     db.rollback()
# db.close()
# 2022-1-1 晚上备注 这报错都没提示哪行错误 坑

'''
查询数据
'''
db = pymysql.connect(host='localhost', user='root', password='admin456_LW!', port=3306, db='spiders')
cursor = db.cursor()
sql = 'SELECT * FROM students WHERE age >= 20'

try:
    cursor.execute(sql)
    print('Count:', cursor.rowcount)
    one = cursor.fetchone()
    print('One:', one)
    results = cursor.fetchall()#获取所有数据
    print('Results:', results)
    print('Results Type:', type(results))
    # 它的内部实现有一个偏移指针用来指向查询结果,最开始偏移指针指向第一条数据,取一次之后,指针偏移到下一条数据,
    # 这样再取的话,就会取到下一条数据了。我们最初调用了一次fetchone
    # 方法,这样结果的偏移指针就指向下一条数据
    for row in results:
        print(row)

except:
    print('Error')

db = pymysql.connect(host='localhost', user='root', password='admin456_LW!', port=3306, db='spiders')
cursor = db.cursor()
try:
    cursor.execute(sql)
    sql = 'SELECT * FROM students WHERE age >= 20'
    print('-----使用while循环来获取所有的数据,逐条进行获取,如果数据量很大建议使用这种方法来实现获取')
    iterator = cursor.fetchone()
    while iterator:
        print('Iterator:',iterator)
        iterator = cursor.fetchone()
except:
    print('error')
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值