网站关键词一般设置几个,争对银行排队做一网站,龙游做网站,如何自建网站接广告Python 操作mysql - 关系型数据库存储 文章目录 Python 操作mysql - 关系型数据库存储简单介绍连接数据库创建表插入数据更新数据删除数据查询数据 简单介绍
关系型数据库是一种以“关系”的方式来组织和存储数据的数据库。它使用表#xff08;也称为“关系”#xff09;来表…Python 操作mysql - 关系型数据库存储 文章目录 Python 操作mysql - 关系型数据库存储简单介绍连接数据库创建表插入数据更新数据删除数据查询数据 简单介绍
关系型数据库是一种以“关系”的方式来组织和存储数据的数据库。它使用表也称为“关系”来表示数据每个表由一组具有相同性质的列和多行数据组成。关系型数据库的主要特征包括
数据结构化数据以表的形式结构化存储表由行和列组成。行代表记录列代表字段。主键每张表都有一个主键用于唯一标识表中的每一条记录。主键确保数据的唯一性。外键外键用于建立表与表之间的关系连接不同表的数据。数据完整性关系型数据库可以通过定义约束如主键、外键、唯一性等来保证数据的完整性和有效性。SQL结构化查询语言关系型数据库使用SQL作为标准接口来进行数据查询、操作、更新和管理。通过SQL用户可以轻松地执行复杂的数据操作。
常见的关系型数据库管理系统RDBMS包括
MySQLPostgreSQLOracle DatabaseMicrosoft SQL ServerSQLite
关系型数据库在很多应用场景中被广泛使用特别是对于需要复杂查询和事务处理的应用。
以mysql为例子 简单使用pymysql 操作数据库
连接数据库
import pymysqldef connect_mysql():# 执行SQL语句sql SELECT * FROM personcursor.execute(sql)# 获取查询结果 fetchall()方法获取所有查询结果rows cursor.fetchall()# 打印查询结果for row in rows:print(row)# 关闭数据库连接db.close()# 主函数
if __name__ __main__:# 创建数据库连接db pymysql.connect(hostlocalhost, userroot, password111111, port3306, dbtest)# 创建游标 利用游标可以执行SQL语句cursor db.cursor()connect_mysql()创建表
def create_table():# 创建 数据表 students# 字段名 id 含义 学号 类型 varchar(20)# 字段名 name 含义 姓名 类型 varchar(20)# 字段名 age 含义 年龄 类型 intsql CREATE TABLE IF NOT EXISTS students (id varchar(20) NOT NULL,name varchar(20) NOT NULL,age int NOT NULL,PRIMARY KEY (id))try:# 执行SQL语句cursor.execute(sql)# 提交到数据库执行db.commit()print(创建数据表 students 成功)except:# 发生错误时回滚db.rollback()print(创建数据表 students 失败)# 主函数
if __name__ __main__:# 创建数据库连接db pymysql.connect(hostlocalhost, userroot, password111111, port3306, dbtest)# 创建游标 利用游标可以执行SQL语句cursor db.cursor()create_table()插入数据 插入过程中要注意事务的四个属性 Atomicity 原子性 事务是一个不可分割的工作单位事务中包括的诸操作要么都做要么都不做。Consistency 一致性 事务必须是数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。Isolation 隔离性 一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的并发执行的各个事务之间不能互相干扰。Durability 持久性 一个事务一旦提交它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。 # 创建数据库连接db pymysql.connect(hostlocalhost, userroot, password111111, port3306, dbtest)# 创建游标 利用游标可以执行SQL语句cursor db.cursor()
def insert_data():# 插入数据# 插入一条数据 (1001, 张三, 20)sql INSERT INTO students (id, name, age) VALUES (%s,%s,%s)try:# 执行SQL语句cursor.execute(sql, (1001, 张三, 20))# 提交到数据库执行db.commit()print(插入数据成功)except:# 发生错误时回滚db.rollback()print(插入数据失败)# 更加通用的插入数据方法
def insert_data_more():# 动态传入字典数据data {id: 1002,name:李四,age: 21,}table_name studentskeys ,.join(data.keys()) # 字段名values ,.join([%s] * len(data)) # 占位符sql INSERT INTO {table_name} ({keys}) VALUES ({values}).format(table_nametable_name, keyskeys, valuesvalues)try:# 执行SQL语句cursor.execute(sql, tuple(data.values()))# 提交到数据库执行db.commit()print(插入数据成功)except:# 发生错误时回滚db.rollback()print(插入数据失败)更新数据 # 创建数据库连接db pymysql.connect(hostlocalhost, userroot, password111111, port3306, dbtest)# 创建游标 利用游标可以执行SQL语句cursor db.cursor()def update_data():# 更新数据# 更新 id 为 1001 的学生的年龄为 22sql UPDATE students SET age %s WHERE id %stry:# 执行SQL语句cursor.execute(sql, (22, 1001))# 提交到数据库执行db.commit()print(更新数据成功)except:# 发生错误时回滚db.rollback()print(更新数据失败) 在实际的数据抓取过程中大部分情况下需要插入数据但是我们关心的是会不会出现重复数据如果出现了我们希望更新数据而不是重复保存一次再实现一种去重的方法如果数据存在 则更新数据如果数据不存在则插入数据。 另外这种做法支持灵活的字典传值。 def insert_or_update_data(data):# 动态传入字典数据table_name studentskeys ,.join(data.keys()) # 字段名values ,.join([%s] * len(data)) # 占位符sql INSERT INTO {table_name} ({keys}) VALUES ({values}) ON DUPLICATE KEY UPDATE {update_sql}.format( # 这里的ON DUPLICATE KEY UPDATE 代表如果主键重复则更新数据table_nametable_name, keyskeys, valuesvalues, update_sql,.join([{key} %s.format(keykey) for key in data.keys()]))# sql 语句完整版本# INSERT INTO students (id, name, age) VALUES (%s,%s,%s) ON DUPLICATE KEY UPDATE id %s, name %s, age %stry:# 执行SQL语句cursor.execute(sql, tuple(data.values()) * 2)# 提交到数据库执行db.commit()print(插入或更新数据成功)except:# 发生错误时回滚db.rollback()print(插入或更新数据失败)删除数据
def delete_data():# 删除数据# 删除 id 为 1001 的学生sql DELETE FROM students WHERE id %stry:# 执行SQL语句cursor.execute(sql, (1001,))# 提交到数据库执行db.commit()print(删除数据成功)except:# 发生错误时回滚db.rollback()print(删除数据失败)查询数据
def select_data():# 查询数据# 查询 age 字段大于 20 的学生的姓名和年龄sql SELECT name, age FROM students WHERE age %stry:# 执行SQL语句cursor.execute(sql, (20))# 获取查询结果 fetchall()方法获取所有查询结果rows cursor.fetchall()# 打印查询结果for row in rows:print(row)except:# 发生错误时回滚db.rollback()print(查询数据失败)
文章转载自: http://www.morning.lkfhk.cn.gov.cn.lkfhk.cn http://www.morning.llxyf.cn.gov.cn.llxyf.cn http://www.morning.yqqgp.cn.gov.cn.yqqgp.cn http://www.morning.xxlz.cn.gov.cn.xxlz.cn http://www.morning.nfgbf.cn.gov.cn.nfgbf.cn http://www.morning.nxdqz.cn.gov.cn.nxdqz.cn http://www.morning.pzjrm.cn.gov.cn.pzjrm.cn http://www.morning.ydmml.cn.gov.cn.ydmml.cn http://www.morning.zcmpk.cn.gov.cn.zcmpk.cn http://www.morning.zwppm.cn.gov.cn.zwppm.cn http://www.morning.ktntj.cn.gov.cn.ktntj.cn http://www.morning.hyryq.cn.gov.cn.hyryq.cn http://www.morning.qtryb.cn.gov.cn.qtryb.cn http://www.morning.dwmmf.cn.gov.cn.dwmmf.cn http://www.morning.yngtl.cn.gov.cn.yngtl.cn http://www.morning.cfjyr.cn.gov.cn.cfjyr.cn http://www.morning.knlgk.cn.gov.cn.knlgk.cn http://www.morning.qrgfw.cn.gov.cn.qrgfw.cn http://www.morning.pfgln.cn.gov.cn.pfgln.cn http://www.morning.tsqpd.cn.gov.cn.tsqpd.cn http://www.morning.rnnq.cn.gov.cn.rnnq.cn http://www.morning.flfdm.cn.gov.cn.flfdm.cn http://www.morning.ykxnp.cn.gov.cn.ykxnp.cn http://www.morning.kjmws.cn.gov.cn.kjmws.cn http://www.morning.guangda11.cn.gov.cn.guangda11.cn http://www.morning.kdxzy.cn.gov.cn.kdxzy.cn http://www.morning.mrpqg.cn.gov.cn.mrpqg.cn http://www.morning.kxltf.cn.gov.cn.kxltf.cn http://www.morning.yzygj.cn.gov.cn.yzygj.cn http://www.morning.rwxnn.cn.gov.cn.rwxnn.cn http://www.morning.pxtgf.cn.gov.cn.pxtgf.cn http://www.morning.frpm.cn.gov.cn.frpm.cn http://www.morning.bfcrp.cn.gov.cn.bfcrp.cn http://www.morning.mdjzydr.com.gov.cn.mdjzydr.com http://www.morning.rxnr.cn.gov.cn.rxnr.cn http://www.morning.tqgx.cn.gov.cn.tqgx.cn http://www.morning.rkdnm.cn.gov.cn.rkdnm.cn http://www.morning.wjtwn.cn.gov.cn.wjtwn.cn http://www.morning.gqfks.cn.gov.cn.gqfks.cn http://www.morning.rrwft.cn.gov.cn.rrwft.cn http://www.morning.zstry.cn.gov.cn.zstry.cn http://www.morning.rqlzz.cn.gov.cn.rqlzz.cn http://www.morning.zbmcz.cn.gov.cn.zbmcz.cn http://www.morning.aa1585.com.gov.cn.aa1585.com http://www.morning.ysmw.cn.gov.cn.ysmw.cn http://www.morning.tpchy.cn.gov.cn.tpchy.cn http://www.morning.mysmz.cn.gov.cn.mysmz.cn http://www.morning.sloxdub.cn.gov.cn.sloxdub.cn http://www.morning.bbyqz.cn.gov.cn.bbyqz.cn http://www.morning.rttp.cn.gov.cn.rttp.cn http://www.morning.qsy36.cn.gov.cn.qsy36.cn http://www.morning.jprrh.cn.gov.cn.jprrh.cn http://www.morning.gqwbl.cn.gov.cn.gqwbl.cn http://www.morning.hlkxb.cn.gov.cn.hlkxb.cn http://www.morning.dsncg.cn.gov.cn.dsncg.cn http://www.morning.rksg.cn.gov.cn.rksg.cn http://www.morning.lngyd.cn.gov.cn.lngyd.cn http://www.morning.rhmpk.cn.gov.cn.rhmpk.cn http://www.morning.bbrf.cn.gov.cn.bbrf.cn http://www.morning.wrtxk.cn.gov.cn.wrtxk.cn http://www.morning.pdkht.cn.gov.cn.pdkht.cn http://www.morning.tphjl.cn.gov.cn.tphjl.cn http://www.morning.wckrl.cn.gov.cn.wckrl.cn http://www.morning.jfmyt.cn.gov.cn.jfmyt.cn http://www.morning.ktmnq.cn.gov.cn.ktmnq.cn http://www.morning.wncb.cn.gov.cn.wncb.cn http://www.morning.wjqyt.cn.gov.cn.wjqyt.cn http://www.morning.lynb.cn.gov.cn.lynb.cn http://www.morning.pjftk.cn.gov.cn.pjftk.cn http://www.morning.xnkh.cn.gov.cn.xnkh.cn http://www.morning.knlgk.cn.gov.cn.knlgk.cn http://www.morning.wpqcj.cn.gov.cn.wpqcj.cn http://www.morning.xlbtz.cn.gov.cn.xlbtz.cn http://www.morning.fwkq.cn.gov.cn.fwkq.cn http://www.morning.trbxt.cn.gov.cn.trbxt.cn http://www.morning.jkzjs.cn.gov.cn.jkzjs.cn http://www.morning.wjhpg.cn.gov.cn.wjhpg.cn http://www.morning.qxljc.cn.gov.cn.qxljc.cn http://www.morning.hwxxh.cn.gov.cn.hwxxh.cn http://www.morning.wdply.cn.gov.cn.wdply.cn