python的错误和异常
异常:
运行期检测到的错误被称为异常。
try语句按照如下方式工作:
首先,执行try子句(在关键字try和关键字except之间的语句)
如果没有异常发生,忽略except子句,try子句执行后结束。
如果在执行try子句的过程中发生了异常,那么try子句余下的部分将被忽略。如果异常的类型和 except 之后的名称相符,那么对应的except子句将被执行。最后执行 try 语句之后的代码。
如果一个异常没有与任何的except匹配,那么这个异常将会传递给上层的try中。
一个 try 语句可能包含多个except子句,分别来处理不同的特定的异常。最多只有一个分支会被执行。
处理程序将只针对对应的try子句中的异常进行处理,而不是其他的 try 的处理程序中的异常。
一个except子句可以同时处理多个异常,这些异常将被放在一个括号里成为一个元组
except (RuntimeError, TypeError, NameError):
pass
try语法:
try_stmt ::= try1_stmt | try2_stmt
try1_stmt ::= "try" ":" suite
("except" [expression ["as" identifier]] ":" suite)+
["else" ":" suite]
["finally" ":" suite]
try2_stmt ::= "try" ":" suite
"finally" ":" suite
try:
print("这是上方的语句")
num1 = 1 / 0
num1 = 100 / 10
# say_hello()
print("这是下方的语句")
except (ZeroDivisionError, NameError) as e:
print("你又拿0做除数了吧")
# 打印异常信息
print(e)
finally:
print("好,该结束了")
python中的模块
__init__.py的作用:
1、识别文件夹作为可调用库
2、在库内文件被调用时默认执行其中的代码,配置模块的初始化操作。
有时候我们在做导入时会偷懒,将包中的所有内容导入
from mypackage import *
__all__ 关联了一个模块列表,当执行 from xx import * 时,就会导入列表中的模块。我们将 __init__.py 修改为:
__all__ = ['subpackage_1', 'subpackage_2']
则在导入模块的时候只会导入__all__中指定的模块。
python中的数据库操作
pymysql的使用
pymysql的文档地址:
Welcome to PyMySQL’s documentation! — PyMySQL 0.7.2 documentation
使用pip安装:pip install PyMySQL
mysql设置UTF-8编码:
[client]
port=3306
default-character-set=utf8
[mysql]
default-character-set=utf8
[mysqld]
character_set_server=utf8
重启mysqld服务器即可
创建数据库:
from pymysql import *
# 建立到数据库的连接
conn = connect(host='localhost',user='root',password='123456')
# 获取游标
mycur = conn.cursor()
# 执行创建数据库的语句
rowNum = mycur.execute("create database pydb")
print("受影响的行数:",rowNum)
# 关闭游标
mycur.close()
# 关闭连接
conn.close()
创建数据库表:
from pymysql import *
# 建立到数据库的连接
conn = connect(host='localhost',user='root',password='123456',database='pydb')
# 获取游标
mycur = conn.cursor()
# 执行创建数据库的语句
rowNum = mycur.execute("""
CREATE TABLE `tb_user` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`username` varchar(50) NOT NULL COMMENT '用户名',
`password` varchar(32) NOT NULL COMMENT '密码,加密存储',
`phone` varchar(20) DEFAULT NULL COMMENT '注册手机号',
`email` varchar(50) DEFAULT NULL COMMENT '注册邮箱',
`created` datetime NOT NULL,
`updated` datetime NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `username` (`username`) USING BTREE,
UNIQUE KEY `phone` (`phone`) USING BTREE,
UNIQUE KEY `email` (`email`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=37 DEFAULT CHARSET=utf8 COMMENT='用户表'
""")
print("受影响的行数:", rowNum)
# 关闭游标
mycur.close()
# 关闭连接
conn.close()
新增数据:
from pymysql import *
# 建立到数据库的连接
conn = connect(host='localhost', user='root', password='123456', database='pydb')
# 获取游标
mycur = conn.cursor()
# 开启事务
conn.begin()
# 执行创建数据库的语句
rowNum = mycur.execute('''
INSERT INTO `tb_user` VALUES ('7', 'zhangsan', 'e10adc3949ba59abbe56e057f20f883e', '13488888888', 'aa@a', '2015-04-06 17:03:55', '2015-04-06 17:03:55');
''')
print("受影响的行数:", rowNum)
# 提交事务
conn.commit()
# 关闭游标
mycur.close()
# 关闭连接
conn.close()
或者:
from pymysql import *
# 建立到数据库的连接
conn = connect(host='localhost', user='root', password='123456', database='pydb')
# 获取游标
mycur = conn.cursor()
# 开启事务
conn.begin()
# 执行创建数据库的语句
# 防止SQL注入,%s是占位符,不是python的
rowNum = mycur.execute('''
INSERT INTO `tb_user` VALUES (%s, %s, %s, %s, %s, %s, %s);
''', (36, 'test02', '202cb962ac59075b964b07152d234b70', '1370348890', None, '2015-08-01 12:28:39', '2015-08-01 12:28:39'))
print("受影响的行数:", rowNum)
# 提交事务
conn.commit()
# 关闭游标
mycur.close()
# 关闭连接
conn.close()
删除数据:
from pymysql import *
# 建立到数据库的连接
conn = connect(host='localhost', user='root', password='123456', database='pydb')
# 获取游标
mycur = conn.cursor()
# 开启事务
conn.begin()
# 执行创建数据库的语句
# 防止SQL注入
rowNum = mycur.execute('delete from tb_user where id=%s', (36,))
print("受影响的行数:", rowNum)
# 提交事务
conn.commit()
# 关闭游标
mycur.close()
# 关闭连接
conn.close()
查询:
from pymysql import *
# 建立到数据库的连接
conn = connect(host='localhost', user='root', password='123456', database='pydb')
# 获取游标
mycur = conn.cursor()
# 执行查询,返回受影响的行数
rowNum = mycur.execute("select * from tb_user")
print("受影响的行数:", rowNum)
# 获取所有结果
results = mycur.fetchall()
# 遍历结果集
for result in results:
print(result)
# 关闭游标
mycur.close()
# 关闭连接
conn.close()