Python学习笔记 10
2017-09-09 09:51
253 查看
1. python操作mysql(mariadb)数据库
首先要确保系统中有python环境,然后需要安装Python访问mysql数据库的模块MySQL-python#yum install MySQL-python -y
环境好了我们直接上代码测试
import MySQLdb as mysql #导入python操作数据库的模块并重命名为简单好记的标志 con = mysql.connect('localhost','root','redhat','lockey') #连接服务器及数据库,当然这一步可以不用写数据库,可以在后面通过cnn.select_db('lockey')来连接到具体的数据库 db = con.cursor() # 使用cursor()方法获取操作游标 insert_com = 'insert into User values(%s,%s,%s)' db.execute(insert_com,('ha1',23,'male')) # 使用execute方法执行SQL语句 #上边两句的作用等同于下面这句,只不过思想更好一点 #db.execute('insert into User values("ha1",23,"male")') con.commit() #提交事务 db.execute('select * from User') #做一次数据库查询的操作 data = db.fetchall() # 使用 fetchall() 方法获取所有执行结果,结果为元组类型。 for i in data: print i db.close() #关闭游标 con.close() #关闭数据库
注意:
对于数据的获取有点类似生成器,当游标移动到最后的时候就不会再有数据了,可以通过db.cursor(number,’absolute’)将游标移动到指定位置
在使用python进行数据插入时如果要通过参数传递,无论你要插入的数据是什么类型,占位符永远都要用%s(为什么通过python往mysql数据库插入数据时整型数据的占位符会报错?)
2. 关于异常
2.1 触发异常我们可以使用raise语句自己触发异常
raise语法格式如下:
raise [Exception [, args [, traceback]]]
语句中Exception是异常的类型(例如,NameError)参数是一个异常参数值。该参数是可选的,如果不提供,异常的参数是”None”。
最后一个参数是可选的(在实践中很少使用),如果存在,是跟踪异常对象。
一个异常可以是一个字符串,类或对象。 Python的内核提供的异常,大多数都是实例化的类,这是一个类的实例的参数。
定义一个异常非常简单,如下所示:
def functionName( level ): if level < 1: raise Exception("Invalid level!", level) # 触发异常后,后面的代码就不会再执行
注意:为了能够捕获异常,”except”语句必须有用相同的异常来抛出类对象或者字符串。
例如我们捕获以上异常,”except”语句如下所示:
try: 正常逻辑 except "Invalid level!": 触发自定义异常 else: 其余代码
示例:
#!/usr/bin/python # -*- coding: UTF-8 -*- # 定义函数 def mye( level ): if level < 1: raise Exception("Invalid level!", level) # 触发异常后,后面的代码就不会再执行 try: mye(0) // 触发异常 except "Invalid level!": print 1 else: print 2
执行以上代码,输出结果为:
$ python test.py Traceback (most recent call last): File "test.py", line 11, in <module> mye(0) File "test.py", line 7, in mye raise Exception("Invalid level!", level) Exception: ('Invalid level!', 0)
2.2 用户自定义异常
通过创建一个新的异常类,程序可以命名它们自己的异常。异常应该是典型的继承自Exception类,通过直接或间接的方式。
以下为与RuntimeError相关的实例,实例中创建了一个类,基类为RuntimeError,用于在异常触发时输出更多的信息。
在try语句块中,用户自定义的异常后执行except块语句,变量 e 是用于创建Networkerror类的实例。
class Networkerror(RuntimeError): def __init__(self, arg): self.args = arg
在你定义以上类后,你可以触发该异常,如下所示:
try: raise Networkerror("Bad hostname") except Networkerror,e: #注意python3不支持这种写法 #except Networkerror as e: print e.args
2.3 预定义的清理行为
一些对象定义了标准的清理行为,无论系统是否成功的使用了它,一旦不需要它了,那么这个标准的清理行为就会执行。
这面这个例子展示了尝试打开一个文件,然后把内容打印到屏幕上:
for line in open("myfile.txt"): print(line, end="")
以上这段代码的问题是,当执行完毕后,文件会保持打开状态,并没有被关闭。
关键词 with 语句就可以保证诸如文件之类的对象在使用完之后一定会正确的执行他的清理方法:
with open("myfile.txt") as f: for line in f: print(line, end="")
以上这段代码执行完毕后,就算在处理过程中出问题了,文件 f 总是会关闭。
3. 正则表达式:
3.1 元字符:[[:digit:]] [[:upper:]]
3.2 通配符:
* ? $,^ []
3.3 正则匹配:
1). 普通字符: hello,world 2). ^,$,[] , ^和$在[]中不代表以什么开头以什么结尾的意思; [0-9],[a-z],[A-Z],[a-zA-Z],[a-z0-9] 3). \d # digit,匹配所有的数字,[0-9] \D # 匹配所有的非数字,[^0-9] \w # [0-9a-zA-Z_] \W # [^0-9a-zA-Z_] \s # space,匹配所有的空白字符 \S # 匹配所有的非空白字符 4). {n} # 代表重复n次 {m,n} # 代表重复m次到n次 {0,} # 重复0次到无穷大,* {1,} # 重复1次到无穷大,+ {0,1} # 重复0次或一次,?
3.4 练习
#检验变量名是否合法 In [34]: myre = r"^[_a-zA-Z]\w{0,}" In [35]: re.findall(myre,"1abc") Out[35]: [] #检验电话号码是否匹配下面要求 #010-12345678(以010开头,-可省略,后面是8个数字) myre = r"^010-{0,1}\d{8}" myre = r"^010-?\d{8}" myre = r"^010-?\d{8}" re.findall(myre,s)
3.5 对正则表达式进行编译
myre = r"^010-?\d{8}" comR = myre.compile(myre) re.findall(comR,s) re.finditer(comR,s) re.sub() # 相当于s.replace() re.split(r"[|:\+]") # s.split()
4. python代码调试
代码调试的几种方式:print,把你想知道的变量打印出来;缺点是,你将来需要手动删除print;
断言, assert (你的预期),“如果没有达到预期显示的内容”
logging
pdb
logging调试
import logging import logging.config # logging.info("hello") # logging.warn("warn: age is error") # logging.critical("critical:age is critical") logging.basicConfig(level=logging.INFO) logging.info("hello") # logging.info('a=%d' %a) # # # debug < info < warn < error < critical # age = -1
assert断言
b = abs(-1) print type(b) b = "hello" assert type(b) == str,'b is int' b.upper()
pdb调试
在程序内部需要导入pdb模块然后使用pdb.set_trace()来进行调试,如果是程序外部的话可以使用以下格式:
python -m pdb xxx.py
import pdb s = 0 s = s+1 pdb.set_trace() n = str(s) print n if __name__ == "__main__": pass
相关文章推荐
- Python3学习笔记10-标准库之正则、时间、路径、文件管理、存储对象
- Python学习笔记 - 10.集合(Set)
- python 学习笔记(10)重构与文件处理
- Python3 学习笔记10_条件语句_20180228
- python自定义输入名字并打印-学习笔记10-输入函数
- Python3.3 学习笔记10 - 图形化界面
- python2.7学习笔记(10) ——面向对象高级编程
- Python学习笔记10-Python MysqlHelper ,MySql 辅助类
- python基础教程_学习笔记10:异常
- Python学习笔记(10)- 用户输入和while循环
- Python学习笔记10
- Python学习笔记10-Python MysqlHelper ,MySql 辅助类
- python 学习笔记(10)
- Python学习笔记(10) -- 回数(关键词:回文)
- python学习笔记(10)
- Python学习笔记10-Python MysqlHelper ,MySql 辅助类
- Python学习笔记10
- python基础教程_学习笔记10:异常
- python 学习笔记 10 -- 正則表達式
- python学习笔记(10)--爬虫下载煎蛋图片