python 数据库编程

本文详细介绍Python与数据库交互的基础知识,涵盖数据库发展历史、数据库功能与分类,重点介绍PyMySQL模块的使用,包括数据库连接、游标操作、SQL执行及事务处理,通过具体实例展示Python进行数据库编程的全过程。
摘要由CSDN通过智能技术生成
=========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.实例01import pymysql  # 引入模块
	# 数据库连接
	db = pymysql.connect(host='localhost', port=3306, user='root', passwd='111111', database="test01", charset='utf8')
	# 使用 cursor() 方法创建一个游标对象 cursor
	cursor = db.cursor()
	# 使用 execute()  方法执行 SQL 查询
	cursor.execute("show databases;")
	# 使用 fetchone() 方法获取所有条数据.
	data = cursor.fetchall()
	print(data)
	# 关闭游标
	cursor.close()
	# 关闭数据库连接
	db.close()



6.实力02import pymysql   # 引入PyMySQL模块

	# 使用pymysq中的connect函数,建立连接,获取连接对象
	con = pymysql.connect(
	    host='localhost',
	    user='root',
	    passwd='111111',
	    database='test01',
	    charset='utf8'
	)

	# 使用连接对象,获取游标
	cur = con.cursor()

	# 将所有需要用到的SQL语句放到一个字典中
	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语句
            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()

            # 定义一个变量,用来存储要执行的sql语句
            # select * from goods_cates where name="" or 1=1 or ""

            # 这种形式会内部过滤注入,%s没有双引号
            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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>