Python MySQL更新表

x33g5p2x  于2021-09-18 转载在 Python  
字(2.8k)|赞(0)|评价(0)|浏览(486)

文章目录

  • 更新表
  • 防止 SQL 注入

更新表

您可以使用“UPDATE”语句更新表中的现有记录。将地址栏从“Valley 345”改写为“Canyoun 123”:

# coding=gbk
"""
作者:川川
@时间  : 2021/9/14 22:01
群:970353786
"""
import mysql.connector

mydb = mysql.connector.connect(
    host="localhost",  # 默认用主机名
    user="root",  # 默认用户名
    password="123456",  # mysql密码
    charset='utf8',  # 编码方式
    database="chuan"  # 数据库名称
)

mycursor = mydb.cursor()

sql = "UPDATE user SET address = 'Canyon 123' WHERE address = 'Valley 345'"

mycursor.execute(sql)

mydb.commit()

print(mycursor.rowcount, "更新成功")

报错了:

在这里插入图片描述

为什么?因为上一篇文章我把user这个表删除了。所以得新建回来。
创建表:

# coding=gbk
"""
作者:川川
@时间  : 2021/9/13 22:06
群:970353786
"""
import mysql.connector

mydb = mysql.connector.connect(
    host="localhost",  # 默认用主机名
    user="root",  # 默认用户名
    password="123456",  # mysql密码
    charset='utf8',  # 编码方式
    database="chuan"  # 数据库名称
)

mycursor = mydb.cursor()

mycursor.execute("CREATE TABLE user (name VARCHAR(255), address VARCHAR(255))")

表中填数据:

# coding=gbk
"""
作者:川川
@时间  : 2021/9/13 22:47
群:970353786
"""
import mysql.connector

mydb = mysql.connector.connect(
    host="localhost",  # 默认用主机名
    user="root",  # 默认用户名
    password="123456",  # mysql密码
    charset='utf8',  # 编码方式
    database="chuan"  # 数据库名称
)

mycursor = mydb.cursor()

sql = "INSERT INTO user (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, "全部添加成功.")

然后再来执行更新表:

# coding=gbk
"""
作者:川川
@时间  : 2021/9/14 22:01
群:970353786
"""
import mysql.connector

mydb = mysql.connector.connect(
    host="localhost",  # 默认用主机名
    user="root",  # 默认用户名
    password="123456",  # mysql密码
    charset='utf8',  # 编码方式
    database="chuan"  # 数据库名称
)

mycursor = mydb.cursor()

sql = "UPDATE user SET address = 'Canyon 123' WHERE address = 'Valley 345'"

mycursor.execute(sql)

mydb.commit()

print(mycursor.rowcount, "更新成功")

运行:

在这里插入图片描述

请注意 UPDATE 语法中的 WHERE 子句: WHERE 子句指定应该更新哪个或哪些记录。如果省略 WHERE 子句,则所有记录都将被更新!

防止 SQL 注入

转义任何查询的值被认为是一种很好的做法,也在更新语句中。这是为了防止 SQL 注入,这是一种常见的网络黑客技术,用于破坏或滥用您的数据库。mysql.connector 模块使用占位符%s来转义 delete 语句中的值:

# coding=gbk
"""
作者:川川
@时间  : 2021/9/14 22:10
群:970353786
"""
import mysql.connector

mydb = mysql.connector.connect(
    host="localhost",  # 默认用主机名
    user="root",  # 默认用户名
    password="123456",  # mysql密码
    charset='utf8',  # 编码方式
    database="chuan"  # 数据库名称
)

mycursor = mydb.cursor()

sql = "UPDATE user SET address = %s WHERE address = %s"
val = ("Valley 345", "Canyon 123")

mycursor.execute(sql, val)

mydb.commit()

print(mycursor.rowcount, "更新成功")

运行:

在这里插入图片描述

相关文章