01 | python数据库简单操作
数据库基本操作
import pymysql
#--------------固定操作----------------
# 连接数据库
db = pymysql.connect(host='localhost', port=3306,
user='root', password='root', database='testdb', charset='utf8')
# 获取游标(操作数据库,执行sql语句)
cur = db.cursor()
#--------------固定操作----------------
#--------------可变操作----------------
#--------------可变操作----------------
#--------------固定操作----------------
# 关闭数据库
cur.close()
db.close()
#--------------固定操作----------------
read
sql = 'select * from branch where branchNo="1";'
cur.execute(sql) # 执行语句
one_row = cur.fetchone()
print(one_row)
write
插入操作
sql="insert into branch(branchNo,street,city,postcode)values(%s,%s,%s,%s)" # 注意这个地方用的%s
branchNo=input("branchNo:")
street=input("street:")
city=input("city:")
postcode=input("postcode:")
cur.execute(sql,[branchNo,street,city,postcode]) # 用这种方式传参,不用操心 具体数据库表的 数据类型
db.commit() # 将写操作提交,多次写操作一同提交
修改操作 和 删除操作 就只能 纯纯地 写 具体的的 sql语句了
小实验🔧
实验目的: 将单词本存放到数据库中
- 建表
mysql> create database dict charset=utf8;
use dict;
create table words(id int primary key auto_increment,word char(32),mean text);
- 编写程序
单词本
a indef art one
abacus n.frame with beads that slide along parallel rods, used for teaching numbers to children, and (in some countries) for counting
abandon v. go away from (a person or thing or place) not intending to return; forsake; desert
abandonment n. abandoning
abase v. ~ oneself/sb lower oneself/sb in dignity; degrade oneself/sb ;
abash to destroy the self-possession or self-confidence of:disconcert
abashed adj. ~ embarrassed; ashamed
abate v. make or become less
abattoir n. = slaughterhouse (slaughter)
abbess n. woman who is head of a convent or nunnery
程序
import pymysql
import re
f = open('dict.txt') # 打开文件
#--------------固定操作----------------
# 连接数据库
db = pymysql.connect(host='localhost', port=3306,
user='root', password='root', database='dict', charset='utf8')
# 获取游标(操作数据库,执行sql语句)
cur = db.cursor()
#--------------固定操作----------------
#--------------可变操作----------------
data = f.readline()
# tmp = data.split(' ')
# print(tmp)
# word=tmp[0]
# print(word)
# mean=' '.join(tmp[1:]).strip() # 拼接去空格
# print(word)
# print(mean)
sql = "insert into words (word,mean)values(%s,%s)"
for line in f:
# 获取单词和解释
tup = re.findall(r"(\S+)\s+(.*)", line)[0] # findall 返回列表套元组 元组内容只是匹配的组内容
try:
cur.execute(sql, tup)
db.commit()
except:
db.rollback()
#--------------可变操作----------------
f.close()
#--------------固定操作----------------
# 关闭数据库
cur.close()
db.close()
#--------------固定操作----------------
小实验🔧
1.存储文件的路径
2.直接存储二进制
写入图片
import pymysql
#--------------固定操作----------------
# 连接数据库
db = pymysql.connect(host='localhost', port=3306,
user='root', password='root', database='testdb', charset='utf8')
# 获取游标(操作数据库,执行sql语句)
cur = db.cursor()
#--------------固定操作----------------
#--------------可变操作----------------
with open("image.jpg", "rb") as f:
data = f.read()
try:
sql = "update branch set image = %s where branchNo='1';"
cur.execute(sql, [data])
db.commit()
except Exception as e:
db.rollback()
print(e)
#--------------可变操作----------------
#--------------固定操作----------------
# 关闭数据库
cur.close()
db.close()
#--------------固定操作----------------
读出图片
import pymysql
#--------------固定操作----------------
# 连接数据库
db = pymysql.connect(host='localhost', port=3306,
user='root', password='root', database='testdb', charset='utf8')
# 获取游标(操作数据库,执行sql语句)
cur = db.cursor()
#--------------固定操作----------------
#--------------可变操作----------------
sql = "select image from branch where branchNo='1';"
cur.execute(sql)
data = cur.fetchone()
with open('a.jpg', 'wb') as f:
f.write(data[0])
#--------------可变操作----------------
#--------------固定操作----------------
# 关闭数据库
cur.close()
db.close()
#--------------固定操作----------------
小实验🔧
编写一个而程序模拟注册和登录的过程
*创建一个user表 包含用户名和密码字段
*应用程序中模拟注册和登录功能
注册则输入用户名密码将用户名密码存入到数据库
(用户名不能重复)
登录则进行数据库比对,如果有该用户则打印登录成功
否则让重新输入
1.建表
create table user(id int primary key auto_increment,name varchar(30) not null,passwd varchar(32) not null);
import pymysql
#--------------固定操作----------------
# 连接数据库
db = pymysql.connect(host='localhost', port=3306,
user='root', password='root', database='testdb', charset='utf8')
# 获取游标(操作数据库,执行sql语句)
cur = db.cursor()
#--------------固定操作----------------
#--------------可变操作----------------
# 注册
def register():
name = input("用户名:")
passwd = input("密 码:")
# 判断用户名是否重复
sql = "select * from user where name='%s'" % name
cur.execute(sql)
result = cur.fetchone()
if result:
return False
try:
sql = "insert into user (name,passwd)\
values(%s,%s)"
cur.execute(sql, [name, passwd])
db.commit()
return True
except:
db.rollback()
return False
def login():
name = input("用户名:")
passwd = input("密 码:")
sql = "select * from user \
where name = '%s' and passwd ='%s'" % (name, passwd)
cur.execute(sql)
result = cur.fetchone()
if result:
return True
#--------------可变操作----------------
#--------------可变操作----------------
while True:
print("""===========
1.注册 2.登录
===========
""")
cmd = input("输入命令:")
if cmd == '1':
# 执行注册
if register():
print("注册成功")
else:
print('注册失败')
elif cmd == '2':
# 执行登录
if login():
print("登录成功")
break
else:
print("登录失败")
else:
print('无功能')
#--------------可变操作----------------
#--------------固定操作----------------
# 关闭数据库
cur.close()
db.close()
#--------------固定操作----------------