=========5.python数据库编程================
1.回顾:
数据库的产生:
-- 早期:纯手工管理纸质数据
-- 中期:在磁盘上的文件系统来存储数据
-- 现代:专门的数据库管理系统
数据库功能:
-- 提供获取和处理数据功能
-- 供组织和存储数据的功能
-- 信息系统的核心技术
数据库分类:
-- 1.关系型数据库:mysql,sqlite,oracle,DB2
-- 2.nosql数据库:mongodb,redis
-- 3.对象关系型数据库:postgresql(了解)
2.PyMySQL模块:
安装 pip install pymysql
3.使用数据库步骤:
连接数据库===>获取游标===>执行sql语句
===>关闭游标===>关闭连接
1.创建连接:
import pymysql
conn = pymysql.connect(
host='localhost',
port=3306,
user='root',
passwd='1234',
db='test',
charset='utf8'
)
2.获取游标:
cur = conn.cursor()
3.游标对象执行的方法:
execute(sql)
fetchone()
fetchmany()
fetchall()
rowcount()
close()
4.关闭游标,关闭连接
cur.close() --关闭游标
conn.close() --关闭连接
4.事务:
-- 事务是访问和更新数据库的一个程序执行单元
-- 特点:
-- 1.原子性:事务中包括的诸多操作要么都做,要么都不做
-- 2.一致性:事务必须使数据库从一致性状态变到另一个一致性状态
-- 3.隔离性:一个事务的执行不能被其他事务干扰
-- 4.持久性:事务一但提交,它对数据库中的改变就是永久性的
开发过程中怎样使用事务:
-- 关闭自动commit:设置autocommit(False)
-- 正常结束事务:conn.commit()
-- 提交事务失败的处理,回滚:conn.rollback()
5.实例01:
import pymysql
db = pymysql.connect(host='localhost', port=3306, user='root', passwd='111111', database="test01", charset='utf8')
cursor = db.cursor()
cursor.execute("show databases;")
data = cursor.fetchall()
print(data)
cursor.close()
db.close()
6.实力02:
import pymysql
con = pymysql.connect(
host='localhost',
user='root',
passwd='111111',
database='test01',
charset='utf8'
)
cur = con.cursor()
sql_string_dict = {
"create": 'create table if not exists day1(card_id int, name VARCHAR(30), address VARCHAR(128)) default charset=utf8',
"insert": ['insert into day1(card_id,name,address) values(1,"Rose","北京")',
'insert into day1(card_id,name,address) values(2,"Jack","天津")',
'insert into day1(card_id,name,address) values(3,"张三","合肥")',
'insert into day1(card_id,name,address) values(4,"LiLy","河北")', ],
"select": 'select * from day1',
"update": 'update day1 set name="小丽" where card_id=4',
"delete": 'delete from day1 where card_id=3',
"drop": 'drop table if EXISTS day1',
}
def for_out(cur):
for row in cur:
print(row)
print()
try:
cur.execute(sql_string_dict["drop"])
print("创建表:")
print(sql_string_dict["create"])
cur.execute(sql_string_dict["create"])
print("插入数据:")
for sql in sql_string_dict["insert"]:
print(sql)
cur.execute(sql)
print("执行查询操作:")
cur.execute(sql_string_dict["select"])
for_out(cur)
print("执行修改操作:")
cur.execute(sql_string_dict["update"])
cur.execute(sql_string_dict["select"])
for_out(cur)
print("执行删除操作:")
cur.execute(sql_string_dict["delete"])
cur.execute(sql_string_dict["select"])
for_out(cur)
con.commit()
except Exception as e:
print(e)
con.rollback()
cur.close()
con.close()
7.python和mysql交互:
from pymysql import *
def main():
find_name = input("请输入要查询的商品类型名:")
conn = connect(host='localhost',
port=3306,
user='root',
password='mysql',
database='jing_dong',
charset='utf8')
cs = conn.cursor()
sql = """select * from goods_cates where name="%s";""" % find_name
print("=======>%s<=========" % sql)
cs.execute(sql)
for temp_info in cs.fetchall():
print(temp_info)
cs.close()
conn.close()
了解
8.防止注入,参数化:
from pymysql import *
def main():
find_name = input("请输入要查询的商品类型名:")
conn = connect(host='localhost',
port=3306,
user='root',
password='mysql',
database='jing_dong',
charset='utf8')
cs = conn.cursor()
cs.execute("""select * from goods_cates where name=%s;""", [find_name])
for temp_info in cs.fetchall():
print(temp_info)
cs.close()
conn.close()
if __name__ == "__main__":
main()