Python3下的MYSQL存储

1.连接数据库

import pymysql
db = pymysql.connect(host = 'localhost',user = 'root',password = '1994fd',port = 3306)
#通过 connect()方法 声明一个MySQL连接对象db localhost也就是公网IP地址
cursor = db.cursor()
#用cursor()方法获得MySQL的操作游标 利用游标操作SQL语句
cursor.execute('SELECT VERSION()')
data = cursor.fetchone()
print('Database version:' ,data)
cursor.execute("CREATE DATABASE spiders DEFAULT CHARACTER SET utf8")
#第二句SQL执行创建数据库的操作 数据库名为spiders
db.close()

2.创建表:

import pymysql
db = pymysql.connect(host = 'localhost',user = 'root',password = '1994fd',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()

3.向数据库插入数据:

import pymysql

data = {
	
	'id' : '20120001',
	'name' : 'Bob',
	'age' : 20 
}
#传入数据是字典,定义为 data变量
table = 'students'
#表名定义为变量table
keys = ','.join(data.keys())
#需要构造插入的字段 id user age 只需将data的键名拿过来  也就是字段名
values = ','.join(['%s']* len(data))
#构造多个占位符
sql = 'INSERT INTO {table} ({keys}) VALUES ({values})'.format(table = table ,keys =keys,values = values)


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

try:
	if cursor.execute(sql,tuple(data.values())):
		print('Successful')
		db.commit()
	#必须执行db对象的commit方法才可以实现数据插入 只有执行这个炒菜时真正将语句提交到数据库的执行方法 
	#对于数据的插入更新 删除 都要调用该方法
except:
	print('Faild')

	db.rollback()
	#rollback方法执行数据回滚相当于什么都没有发生过
db.close()

4.更新数据库:

sql = 'UPDATE students SET age = %s WHERE name = %s'
try :
	cursor.execute(sql, (25,'Bob'))
except:
	db.rollback()
db.close()

5.如果数据存在,则更新数据,不存在,则插入数据:

data = {
	
	'id' : '20120001',
	'name' : 'Bob',
	'age' : 20 
}

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:
	if cursor.execute(sql,tuple(data.values())*2):
		print('Win')
		db.commit()

except:
	print('Failed')
	db.rollback()

db.close()

6.删除数据:

#删除数据
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()

7.查询数据

#查询数据
sql = 'SELECT * FROM students WHERE age >= 20'
try:
	cursor.execute(sql)

	print('Count',cursor.rowcount)
	#调用cursor的rowcount属性获取查询结果的条数
	one = cursor.fetchone()
	#fetchone()方法可以获取结果的第一条数据 返回结果是元祖形式
	results = cursor.fetchall()
	#fetchall 得到结果的所有数据,然后将结果和类型打印出来,它是二元重组,每个元素是一个记录
	#这里 最后返回的是3条数据 因为它的内部有一个偏移指针用来指向查询结果,最开始偏移指针指向第一条数据
	#取一次之后,便指向下一条数据了
	print('Results:',results)
	print('Results type:',type(results))
	for row in results:
		print(row)
except:
	print('Error')
#=============================================================
#用while 循环加 fetchone()方法来获取所有数据
sql = 'SELECT * FROM students WHERE age >= 20'
try:
	cursor.execute(sql)

	print('Count',cursor.rowcount)
	#调用cursor的rowcount属性获取查询结果的条数
	row = cursor.fetchone()
	#fetchone()方法可以获取结果的第一条数据 返回结果是元祖形式
	while row:
		print('Row:',row)
		row = cursor.fetchone()

except:
	print('Error')


 

猜你喜欢

转载自blog.csdn.net/weixin_41399020/article/details/82959814