Python数据库编程(mysql)

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='tan',
				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() 方法创建一个游标对象 cursor
	cursor = db.cursor()
	# 使用 execute()  方法执行 SQL 查询
	cursor.execute("show databases;")
	# 使用 fetchone() 方法获取所有条数据.
	data = cursor.fetchall()
	print(data)
	# 关闭游标
	cursor.close()
	# 关闭数据库连接
	db.close()

6.实例02:

	import 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()


9.扩充讲一下navicat。
官网:https://www.navicat.com.cn/
Navicat是一套快速、可靠并价格相当便宜的数据库管理工具,专为简化数据库的管理及降低系统管理成本而设。它的设计符合数据库管理员、开发人员及中小企业的需要。Navicat 是以直觉化的图形用户界面而建的,让你可以以安全并且简单的方式创建、组织、访问并共用信息。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值