Python中的MySQL数据库编程

1.刚开始我们先给一张图片,是介绍Python操作MySQl详细步骤。
在这里插入图片描述
2.在Python语言中要想操作数据库,就需要使用的pymysql这个模块。

from pymysql import connect

3.获取connection连接对象

要和MySQL数据库连接,需要调用pymysql模块中的connect()方法,其中也包括一些参数解释。

conn=connect(参数列表)
  • 参数host:连接的mysql主机,如果本机是’localhost’
  • 参数port:连接的mysql主机的端口,默认是3306
  • 参数database:数据库的名称
  • 参数user:连接的用户名
  • 参数password:连接的密码
  • 参数charset:通信采用的编码方式,推荐使用utf8

4. 常用的方法有以下:

  • 关闭数据库连接 conn.close()
  • 提交数据 conn.commit()
  • 撤销回滚数据 conn.rollback()
  • 获取游标 cur = conn.cursor()

5.Cursor游标对象

5.1获取Cursor对象

调用Connection对象的cursor()方法

cur =conn.cursor()

目的: 执行sql语句(使用频度最高的语句为select、insert、update、delete)

5.2 使用游标执行SQL语句

execute(operation [, parameters ])

执行SQL语句,返回受影响的行数,主要用于执行insert、update、delete语句,也可以执行create、alter、drop等语句

5.3 关闭游标

cur.close()

5.4 获取结果集中的一条

cur.fetchone()

返回一个元组

5.5 获取结果集中的所有

cur.fetchall()

执行查询时,获取结果集的所有行,一行构成一个元组,再将这些元组装入一个元组返回

6.pymysql完成数据查询

import pymysql

conn = pymysql.connect(host='localhost', port=3306, user='root',password='mysql',database='python_test_1', charset='utf8')   
# 获取游标
cursor = conn.cursor()

# 执行SQL语句 返回值就是SQL语句在执行过程中影响的行数
sql = "select * from hero;"

row_count = cursor.execute(sql)
print("SQL语句执行影响的行数%d" % row_count)

# 取出结果集中一行  返回的结果是一行
print(cursor.fetchone())

# 取出结果集中的所有数据  返回一行数据
for line in cursor.fetchall():
    print(line)
# 关闭游标
cursor.close()    
# 关闭连接
conn.close()

7.pymysql完成对数据库的增删改

import pymysql

conn = pymysql.connect(host='127.0.0.1',port=3306,user='root',password='mysql',db='python_test_1', charset='utf8')
# 通过连接获取游标
cursor = conn.cursor()
# sql = "delete from hero where id = 5;"
# sql = insert into hero (name) values ('黎明');
sql = "update hero set kongfuid=444 where id = 4;"

row_count = cursor.execute(sql)
print("SQL语句执行影响的行数%d" % row_count)
# 提交数据到数据库
conn.commit()

# 回滚数据到什么都不做的状态 即撤销刚刚的修改
# conn.rollback()

# 关闭游标和连接
cursor.close()
conn.close()

8.参数化列表防止SQL注入

SQL注入 产生原因: 后台将用户提交的带有恶意的数据和SQL进行字符串方式的拼接,从而影响了SQL语句的语义,最终产生数据泄露的现象。
如果防止: sql语句的参数化, 将SQL语句的所有数据参数存在一个列表中传递给execute函数的第二个参数

from pymysql import connect

def main():
    find_name = input("请输入物品名称:")
    # 创建Connection连接
    conn = connect(host='localhost',port=3306,user='root',password='mysql',database='goods',charset='utf8')
    # 获得Cursor对象
    cs1 = conn.cursor()
    # 非安全的方式
	# 输入 " or 1=1 or "   (双引号也要输入)
	# sql = 'select * from goods where name="%s"' % find_name
	# print("""sql===>%s<====""" % sql)
	# # 执行select语句,并返回受影响的行数:查询所有数据
 	# count = cs1.execute(sql)

	# 安全的方式
	# 构造参数列表
	params = [find_name]
	# 执行select语句,并返回受影响的行数:查询所有数据
	count = cs1.execute('select * from goods where name=%s', params)
	# 注意:
	# 如果要是有多个参数,需要进行参数化
	# 那么params = [数值1, 数值2....],此时sql语句中有多个%s即可

	# 打印受影响的行数
	print(count)
	# 获取查询的结果
	# result = cs1.fetchone()
	result = cs1.fetchall()
	# 打印查询的结果
	print(result)
	# 关闭Cursor对象
	cs1.close()
	# 关闭Connection对象
	conn.close()
	
if __name__ == '__main__':
    main()

猜你喜欢

转载自blog.csdn.net/weixin_38819889/article/details/88566405