cursor.execute(sql)的使用方法与相关知识

一、概述

在Python的数据库编程中,我们经常会用到的是cursor.execute(sql)这个函数,它用来执行SQL语句,并且返回受影响的行数。它是Python DB-API规范所要求实现的一个方法。在这篇文章中,我们将围绕这个方法,从以下几个方面进行讲解:

二、参数

cursor.execute()函数的参数是SQL语句。这个语句可以是一个字符串变量或是直接写到函数里的,具体可以看下面的示例:

import mysql.connector

mydb = mysql.connector.connect(
  host="localhost",
  user="yourusername",
  password="yourpassword",
  database="mydatabase"
)

mycursor = mydb.cursor()

sql = "INSERT INTO customers (name, address) VALUES (%s, %s)"
val = ("John", "Highway 21")
mycursor.execute(sql, val)

mydb.commit()

print(mycursor.rowcount, "record inserted.")

在这个例子中,我们使用了mysql.connector这个库来连接MySQL数据库,同时用cursor()方法定义了游标对象mycursor。使用了一条SQL语句INSERT INTO来新增一条数据到数据库表格customers中。

在游标对象mycursor上,我们调用了execute()方法并且传入了sql和val两个参数。其中sql是一个SQL语句字符串,val是一个元组。这里使用了?作为占位符,那么就要按照?的顺序传入后面的数据。

三、执行结果

在执行完cursor.execute()方法后,我们可以调用一些其他的方法来获取执行结果。

1、调用rowcount属性可以获取受影响的行数,例如:

mycursor.execute("SELECT * FROM customers")
myresult = mycursor.fetchall()
print("Number of rows in customers is: ", mycursor.rowcount)

2、调用fetchone()、fetchmany()或者fetchall()方法,分别返回一条、多条或所有数据。

例如,下面的代码会返回所有customers表的数据:

mycursor.execute("SELECT * FROM customers")
myresult = mycursor.fetchall()
for x in myresult:
  print(x)

四、防止SQL注入

SQL注入攻击是数据库编程中的一个比较棘手的问题。如果我们在构造SQL语句的时候,不小心将来自用户输入的数据拼接进去,那么就存在被攻击的风险。为了防止这种情况的发生,我们需要使用参数化查询而不是直接拼接字符串。而参数化查询就是在SQL语句中使用占位符,然后将参数传入到函数中来进行替换。比如:

sql = "SELECT * FROM customers WHERE address = %s"
adr = ("Yellow Garden 2", )
mycursor.execute(sql, adr)

在这个例子中,我们在SQL语句中使用了一个占位符%s。在调用execute()方法时,我们将指定的元组传入到方法中,作为替换占位符的参数。这样,即使从用户输入的数据中截取了字符串,也不会造成SQL注入的问题。

五、批量操作

在Python中,我们也可以使用executemany()方法对多条SQL语句进行批处理。方法的使用方式与execute()类似,只不过需要传入的数据不同而已。比如:

sql = "INSERT INTO customers (name, address) VALUES (%s, %s)"
val = [
  ('Peter', 'Lowstreet 4'),
  ('Amy', 'Apple st 652'),
  ('Hannah', 'Mountain 21'),
  ('Michael', 'Valley 345'),
  ('Sandy', 'Ocean blvd 2'),
  ('Betty', 'Green Grass 1'),
  ('Richard', 'Sky st 331'),
  ('Susan', 'One way 98'),
  ('Vicky', 'Yellow Garden 2'),
  ('Ben', 'Park Lane 38'),
  ('William', 'Central st 954'),
  ('Chuck', 'Main Road 989'),
  ('Viola', 'Sideway 1633')
]

mycursor.executemany(sql, val)
mydb.commit()
print(mycursor.rowcount, "was inserted.")

在这个例子中,我们使用了一个包含多个元组的列表val。在调用executemany()方法时,我们将sql和这个元组列表作为参数传入。这样就可以批量地插入多个数据。

原创文章,作者:ABXC,如若转载,请注明出处:https://www.506064.com/n/146072.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
ABXCABXC
上一篇 2024-10-29 18:57
下一篇 2024-10-29 18:57

相关推荐

  • Python中init方法的作用及使用方法

    Python中的init方法是一个类的构造函数,在创建对象时被调用。在本篇文章中,我们将从多个方面详细讨论init方法的作用,使用方法以及注意点。 一、定义init方法 在Pyth…

    编程 2025-04-29
  • Python符号定义和使用方法

    本文将从多个方面介绍Python符号的定义和使用方法,涉及注释、变量、运算符、条件语句和循环等多个方面。 一、注释 1、单行注释 # 这是一条单行注释 2、多行注释 “”” 这是一…

    编程 2025-04-29
  • Python下载到桌面图标使用方法用法介绍

    Python是一种高级编程语言,非常适合初学者,同时也深受老手喜爱。在Python中,如果我们想要将某个程序下载到桌面上,需要注意一些细节。本文将从多个方面对Python下载到桌面…

    编程 2025-04-29
  • Python匿名变量的使用方法

    Python中的匿名变量是指使用“_”来代替变量名的特殊变量。这篇文章将从多个方面介绍匿名变量的使用方法。 一、作为占位符 匿名变量通常用作占位符,用于代替一个不需要使用的变量。例…

    编程 2025-04-29
  • 百度地区热力图的介绍和使用方法

    本文将详细介绍百度地区热力图的使用方法和相关知识。 一、什么是百度地区热力图 百度地区热力图是一种用于展示区域内某种数据分布情况的地图呈现方式。它通过一张地图上不同区域的颜色深浅,…

    编程 2025-04-29
  • Matlab中addpath的使用方法

    addpath函数是Matlab中的一个非常常用的函数,它可以在Matlab环境中增加一个或者多个文件夹的路径,使得Matlab可以在需要时自动搜索到这些文件夹中的函数。因此,学会…

    编程 2025-04-29
  • Python函数重载的使用方法和注意事项

    Python是一种动态语言,它的函数重载特性有些不同于静态语言,本文将会从使用方法、注意事项等多个方面详细阐述Python函数重载,帮助读者更好地应用Python函数重载。 一、基…

    编程 2025-04-28
  • Python同步赋值语句的使用方法和注意事项

    Python同步赋值语句是Python中用来同时为多个变量赋值的一种方法。通过这种方式,可以很方便地同时为多个变量赋值,从而提高代码的可读性和编写效率。下面从多个方面详细介绍Pyt…

    编程 2025-04-28
  • Python后缀名及其使用方法解析

    Python是一种通用性编程语言,其源文件使用.py作为文件后缀名。在本篇文章中,将会从多个方面深入解析Python的后缀名以及如何为Python源文件添加其他的后缀名。 一、.p…

    编程 2025-04-28
  • 微信mac版历史版完整代码示例与使用方法

    微信是一款广受欢迎的即时通讯软件,为了方便用户在Mac电脑上也能使用微信,微信团队推出了Mac版微信。本文将主要讲解微信mac版历史版的完整代码示例以及使用方法。 一、下载微信ma…

    编程 2025-04-28

发表回复

登录后才能评论