内容正文:
《Python应用程序设计》
7.3 数据库的增、删、改
1
MySQL数据库增、删、改语法格式
1
使用Python完成数据库的增、删、改
2
数据库访问参数化
3
目录
2
MySQL数据库增、删、改语法
1
1-1 增加数据
语法格式:
INSERT INTO table_name
( field1, field2,... ,fieldN )
VALUES
( value1, value2,...,valueN )
说明:
VALUES中除了可以指定确定的数值之外,还可以使用表达式expr,如果数据是字符型,必须使用单引号或者双引号将值包围起来,如:"李梅";
将一个字符串插入到超过字段的最大长度的一个CHAR、VARCHAR、TEXT或BLOB列中,值被截断为列的最大长度;
把一个与字段类型不合法的值插入到一个日期或时间列,会被设置为“零”值。
3
MySQL数据库增、删、改语法
1
1-2 更新数据
语法格式:
UPDATE table_name
SET field1=new-value1, field2=new-value2,……
[WHERE Clause]
说明:
在SET子句中可以同时更新一个或多个字段;
可以在WHERE子句中指定更新条件,若不指定条件则将数据表中的全部记录进行了更新。
4
MySQL数据库增、删、改语法
1
1-3 删除数据
语法格式:
DELETE FROM table_name
[WHERE Clause]
说明:
如果没有指定WHERE子句,表中的所有记录将被删除;
WHERE用来指定删除的条件。
5
使用Python完成数据库的增、删、改
2
使用Python对数据库的数据表记录进行增、删、改的基本步骤和前面所述的查询类似:
首先要创建数据库连接,然后是创建游标对象,并且运用其各种方法进行数据的获取,最后关闭数据库连接。所不同的地方主要是,游标对象操作的语句不同,是INSERT、DELETE和UPDATE,而不是SELECT 语句。
使用Python完成数据库的增、删、改
2
另外,由于查询语句不改变数据库中的数据,有时感觉执行commit()方法作用不明显,而这三个语句都会使数据库中的数据发生改变,因此不要忘记在execute()方法后面运用执行commit()方法,并通过rowcount获取受影响的行数,根据行数来判断操作是否成功,否则命令并没有被真正地提交给数据库处理,因此也无法真正地改变数据库的记录。
使用Python完成数据库的增、删、改
2
2-1 使用Python对数据库的数据表记录进行增加
如:向Student数据表中插入一条记录
sql= ″INSERT INTO Student(Sno, Sname, Ssex, Sbirthday, EntranceTime, ClassNo)
VALUES('1901011101','李四','男','2002-03-12','2019-09-01','19010111')″
curosr.execute(sql)
conn.commit()
row = cursor.rowcount
if row == 1:
print(″插入记录成功!″)
使用Python完成数据库的增、删、改
2
2-2 使用Python对数据库的数据表记录进行修改
如: 将Student数据表中学号为“1901011101”的学生的出生年月修改为“2002-03-15”
sql = ″UPDATE Student SET Sbirthday='2002-03-15' WHERE Sno='1901011101'″
cursor.execute(sql)
conn.commit()
row = cursor.rowcount
if row > 0:
print(″信息修改成功!″)
使用Python完成数据库的增、删、改
2
2-3 使用Python对数据库的数据表记录进行删除
如: 删除学生表Student中的学号为“1901011101”的记录
sql = ″DELETE FROM Student WHERE Sno='1901011101'″
cursor.execute(sql)
conn.commit()
row=cursor.rowcount
if (row>0):
print(″删除成功!″)
使用Python完成数据库的增、删、改
2
2-4 Python中数据库的异常处理
在使用Python对数据库进行增、删、改、查操作时,为防止出现异常无法反馈给用户结果,需要使用try…catch...finally异常处理机制。捕获异常的语法如下:
try:
<语句> # 带捕获异常的代码块
except <异常类型> as <变量名>:
<语句> #异常的处理代码块
finally:
<语句> #退出try时总会执行
数据库访问参数化
3
3-1 为什么书写SQL语句要参数化
SQL语句参数化可以解决如下问题:
(1)数据复杂,组合的SQL命令可能会无效的情况。
如:Student数据表中如果要插入一个姓名为R"J的学生,那么:
sql=“INSERT INTO Student(Sno,Sname) VALUES('1101011111', 'R"J')“
这样的SQL命令是无效的,如何插入这样的记录呢?
(2)为了避免SQL注入的问题,把SQL语句进行参数化,从而来增加数据库的安全性。
数据库访问参数化
3
3-2 参数化的SQL语句
带参数的SQL语句是在SQL语句中将值用参数表示,MySQL数据库参数统一用“%s”表示。如:
sql=“INSERT INTO Student(Sno,Sname,Ssex,Sbirthday,EntranceTime,ClassNo) VALUES(%s,%s ,%s ,%s ,%s ,%s)”
数据库访问参数化
3
3-2 参数化的SQL语句
执行带参数的SQL语句时,语法格式为:
cursor.execute(带参数的SQL语句,[参数列表])
如上述SQL语句的执行语句为:
cursor.execute(sql,[ '1901011109', '王五', '男', '2002-02-22', '2019-09-01', '19010111'])
THANK YOU
15
$$