关系型数据库存储

关系型数据库是基于关系模型的数据库,而关系模型是通过二维表来保存的,所以它的存储方式就是行列组成的表。多个表组成一个数据库。

关系型数据库有多种,如MySQl、Oracle、SQLite、SQL Server等。

MySQL的存储

首先需要安装MySQL数据库和相关的库

相关数据库的安装

下载“mysql-installer-web-community-8.0.11.0.msi”,然后点击Next直接安装即可。

如果想要和Python交互的话,还需要安装PyMySQL。

安装完成后验证是否安装成功:

>>> import pymysql
>>> pymysql.VERSION
(0, 9, 2, None)

连接数据库

利用PyMySQL连接MySQL,然后创建一个新的数据库,名字叫作chenzf。

import pymysql

db = pymysql.connect(host='localhost', user='root', password='1xxxxx8', port=3306)
cursor = db.cursor()
cursor.execute('SELECT VERSION()')
data = cursor.fetchone()
print('Database version:', data)
cursor.execute("CREATE DATABASE chenzf DEFAULT CHARACTER SET utf8mb4")
db.close()

运行结果为:

Database version: ('8.0.11',)


通过connect()方法声明一个MySQL连接对象db,由于MySQL在本地运行,所以传入的是localhost;端口号是默认的。连接成功后,调用cursor()方法获得MySQL的操作游标,利用游标来执行两句SQL语句,直接用execute()方法执行即可。第一句SQL语句用于获得数据库的版本,调用fetchone()方法获得第一条数据,第二句SQL语句创建一个新的数据库,默认编码是utf8mb4。

创建表

创建数据库的操作只需执行一次就好,接下来新创建一个students数据表:

import pymysql

db = pymysql.connect(host='localhost', user='root', password='xxxxxx', port=3306, db='chenzf')
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()

运行结果:


插入数据

向数据库中插入信息:

import pymysql

new_id = '20180001'
new_user = 'chen'
new_age = 25

db = pymysql.connect(host='localhost', user='root', password='xxxxx', port=3306, db='chenzf')
cursor = db.cursor()
sql = 'INSERT INTO students(id, name, age) values(%s, %s, %s)'

try:
	cursor.execute(sql, (new_id, new_user, new_age))
	db.commit()
except:
	db.rollback()

db.close()

需要执行db对象的commit()方法才可以实现数据插入,这个方法才是真正将语句提交到数据库执行的方法。对于数据插入、更新、删除操作,都需调用该方法才能生效。

加入异常处理,如果执行失败,则调用rollback()执行数据回滚。

这里涉及到事务问题:事务机制可以确保数据的一致性,也就是这件事要么发生了,要么没有发生。插入、删除、更新操作都必须是一个事务,所以这些操作的标准写法是:

try:
	cursor.execute(sql)
	db.commit()
except:
	db.rollback()
运行结果:

为了方便插入数据,需要构造一个通用方法:传入动态变化的字典!

import pymysql

data = {
	'id': '20180002',
	'name': 'BOB',
	'age': 25
}

table = 'students'  # 表名
keys = ', '.join(data.keys())  # 用逗号隔开
values = ', '.join(['%s'] * len(data))  # 构造%s, %s, %s
# sql = 'INSERT INTO students(id, name, age) values(%s, %s, %s)'
sql = 'INSERT INTO {table}({keys}) VALUES ({values})'.format(table=table, keys=keys, values=values)

db = pymysql.connect(host='localhost', user='root', password='120618', port=3306, db='chenzf')
cursor = db.cursor()

try:
	# cursor.execute(sql, (new_id, new_user, new_age))
	cursor.execute(sql, tuple(data.values()))
	print('Successful')
	db.commit()
except:
	print('Failed')
	db.rollback()

db.close()

运行结果:


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值