首页
关于
友情链接
文章归档
Search
1
centos 32位 64位 下挂vagex一键包代码
719 阅读
2
wordpress转typecho方法
615 阅读
3
一个自制的virto精简版kvm qemu win2003模板 最低64M内存可用
605 阅读
4
PHP 安装
540 阅读
5
暴雨 车被泡了~
483 阅读
默认分类
vps综合利用
登录
/
注册
Search
标签搜索
Uncategorized
安装
mysql
utf-8
网站
google
linux
free
免费
黑色
ssl
一键包
优化
40%
press
vagex
32位
64位
debian
domain
御品VPS
累计撰写
501
篇文章
累计收到
1
条评论
首页
栏目
默认分类
vps综合利用
页面
关于
友情链接
文章归档
搜索到
37
篇与
安装
的结果
2018-03-23
Python3 模块
Python3 数据结构Python3 输入和输出 Python3 模块在前面的几个章节中我们脚本上是用 python 解释器来编程,如果你从 Python 解释器退出再进入,那么你定义的所有的方法和变量就都消失了。为此 Python 提供了一个办法,把这些定义存放在文件中,为一些脚本或者交互式的解释器实例使用,这个文件被称为模块。模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py。模块可以被别的程序引入,以使用该模块中的函数等功能。这也是使用 python 标准库的方法。下面是一个使用 python 标准库中模块的例子。 #!/usr/bin/python3 # 文件名: using_sys.py import sys print('命令行参数如下:') for i in sys.argv: print(i) print('/n/nPython 路径为:', sys.path, '/n') 执行结果如下所示: $ python using_sys.py 参数1 参数2 命令行参数如下: using_sys.py 参数1 参数2 Python 路径为: ['/root', '/usr/lib/python3.4', '/usr/lib/python3.4/plat-x86_64-linux-gnu', '/usr/lib/python3.4/lib-dynload', '/usr/local/lib/python3.4/dist-packages', '/usr/lib/python3/dist-packages'] 1、import sys 引入 python 标准库中的 sys.py 模块;这是引入某一模块的方法。2、sys.argv 是一个包含命令行参数的列表。3、sys.path 包含了一个 Python 解释器自动查找所需模块的路径的列表。 import 语句想使用 Python 源文件,只需在另一个源文件里执行 import 语句,语法如下: import module1[, module2[,... moduleN] 当解释器遇到 import 语句,如果模块在当前的搜索路径就会被导入。搜索路径是一个解释器会先进行搜索的所有目录的列表。如想要导入模块 support,需要把命令放在脚本的顶端:support.py 文件代码为: #!/usr/bin/python3 # Filename: support.py def print_func( par ): print ("Hello : ", par) return test.py 引入 support 模块: #!/usr/bin/python3 # Filename: test.py # 导入模块 import support # 现在可以调用模块里包含的函数了 support.print_func("Runoob") 以上实例输出结果: $ python3 test.py Hello : Runoob 一个模块只会被导入一次,不管你执行了多少次import。这样可以防止导入模块被一遍又一遍地执行。当我们使用import语句的时候,Python解释器是怎样找到对应的文件的呢?这就涉及到Python的搜索路径,搜索路径是由一系列目录名组成的,Python解释器就依次从这些目录中去寻找所引入的模块。这看起来很像环境变量,事实上,也可以通过定义环境变量的方式来确定搜索路径。搜索路径是在Python编译或安装的时候确定的,安装新的库应该也会修改。搜索路径被存储在sys模块中的path变量,做一个简单的实验,在交互式解释器中,输入以下代码: >>> import sys >>> sys.path ['', '/usr/lib/python3.4', '/usr/lib/python3.4/plat-x86_64-linux-gnu', '/usr/lib/python3.4/lib-dynload', '/usr/local/lib/python3.4/dist-packages', '/usr/lib/python3/dist-packages'] >>> sys.path 输出是一个列表,其中第一项是空串'',代表当前目录(若是从一个脚本中打印出来的话,可以更清楚地看出是哪个目录),亦即我们执行python解释器的目录(对于脚本的话就是运行的脚本所在的目录)。因此若像我一样在当前目录下存在与要引入模块同名的文件,就会把要引入的模块屏蔽掉。了解了搜索路径的概念,就可以在脚本中修改sys.path来引入一些不在搜索路径中的模块。现在,在解释器的当前目录或者 sys.path 中的一个目录里面来创建一个fibo.py的文件,代码如下: # 斐波那契(fibonacci)数列模块 def fib(n): # 定义到 n 的斐波那契数列 a, b = 0, 1 while b < n: print(b, end=' ') a, b = b, a+b print() def fib2(n): # 返回到 n 的斐波那契数列 result = [] a, b = 0, 1 while b < n: result.append(b) a, b = b, a+b return result 然后进入Python解释器,使用下面的命令导入这个模块: >>> import fibo 这样做并没有把直接定义在fibo中的函数名称写入到当前符号表里,只是把模块fibo的名字写到了那里。可以使用模块名称来访问函数: >>> fibo.fib(1000) 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987 >>> fibo.fib2(100) [1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89] >>> fibo.__name__ 'fibo' 如果你打算经常使用一个函数,你可以把它赋给一个本地的名称: $ python using_sys.py 参数1 参数2 命令行参数如下: using_sys.py 参数1 参数2 Python 路径为: ['/root', '/usr/lib/python3.4', '/usr/lib/python3.4/plat-x86_64-linux-gnu', '/usr/lib/python3.4/lib-dynload', '/usr/local/lib/python3.4/dist-packages', '/usr/lib/python3/dist-packages'] 0from…import 语句Python的from语句让你从模块中导入一个指定的部分到当前命名空间中,语法如下: $ python using_sys.py 参数1 参数2 命令行参数如下: using_sys.py 参数1 参数2 Python 路径为: ['/root', '/usr/lib/python3.4', '/usr/lib/python3.4/plat-x86_64-linux-gnu', '/usr/lib/python3.4/lib-dynload', '/usr/local/lib/python3.4/dist-packages', '/usr/lib/python3/dist-packages'] 1例如,要导入模块 fibo 的 fib 函数,使用如下语句: $ python using_sys.py 参数1 参数2 命令行参数如下: using_sys.py 参数1 参数2 Python 路径为: ['/root', '/usr/lib/python3.4', '/usr/lib/python3.4/plat-x86_64-linux-gnu', '/usr/lib/python3.4/lib-dynload', '/usr/local/lib/python3.4/dist-packages', '/usr/lib/python3/dist-packages'] 2这个声明不会把整个fibo模块导入到当前的命名空间中,它只会将fibo里的fib函数引入进来。From…import* 语句把一个模块的所有内容全都导入到当前的命名空间也是可行的,只需使用如下声明: $ python using_sys.py 参数1 参数2 命令行参数如下: using_sys.py 参数1 参数2 Python 路径为: ['/root', '/usr/lib/python3.4', '/usr/lib/python3.4/plat-x86_64-linux-gnu', '/usr/lib/python3.4/lib-dynload', '/usr/local/lib/python3.4/dist-packages', '/usr/lib/python3/dist-packages'] 3这提供了一个简单的方法来导入一个模块中的所有项目。然而这种声明不该被过多地使用。深入模块模块除了方法定义,还可以包括可执行的代码。这些代码一般用来初始化这个模块。这些代码只有在第一次被导入时才会被执行。每个模块有各自独立的符号表,在模块内部为所有的函数当作全局符号表来使用。所以,模块的作者可以放心大胆的在模块内部使用这些全局变量,而不用担心把其他用户的全局变量搞花。从另一个方面,当你确实知道你在做什么的话,你也可以通过 modname.itemname 这样的表示法来访问模块内的函数。模块是可以导入其他模块的。在一个模块(或者脚本,或者其他地方)的最前面使用 import 来导入一个模块,当然这只是一个惯例,而不是强制的。被导入的模块的名称将被放入当前操作的模块的 符号表中。还有一种导入的方法,可以使用 import 直接把模块内(函数,变量的)名称导入到当前操作模块。比如: $ python using_sys.py 参数1 参数2 命令行参数如下: using_sys.py 参数1 参数2 Python 路径为: ['/root', '/usr/lib/python3.4', '/usr/lib/python3.4/plat-x86_64-linux-gnu', '/usr/lib/python3.4/lib-dynload', '/usr/local/lib/python3.4/dist-packages', '/usr/lib/python3/dist-packages'] 4这种导入的方法不会把被导入的模块的名称放在当前的字符表中(所以在这个例子里面,fibo 这个名称是没有定义的)。这还有一种方法,可以一次性的把模块中的所有(函数,变量)名称都导入到当前模块的字符表: $ python using_sys.py 参数1 参数2 命令行参数如下: using_sys.py 参数1 参数2 Python 路径为: ['/root', '/usr/lib/python3.4', '/usr/lib/python3.4/plat-x86_64-linux-gnu', '/usr/lib/python3.4/lib-dynload', '/usr/local/lib/python3.4/dist-packages', '/usr/lib/python3/dist-packages'] 5这将把所有的名字都导入进来,但是那些由单一下划线(_)开头的名字不在此例。大多数情况, Python程序员不使用这种方法,因为引入的其它来源的命名,很可能覆盖了已有的定义。__name__属性一个模块被另一个程序第一次引入时,其主程序将运行。如果我们想在模块被引入时,模块中的某一程序块不执行,我们可以用__name__属性来使该程序块仅在该模块自身运行时执行。 $ python using_sys.py 参数1 参数2 命令行参数如下: using_sys.py 参数1 参数2 Python 路径为: ['/root', '/usr/lib/python3.4', '/usr/lib/python3.4/plat-x86_64-linux-gnu', '/usr/lib/python3.4/lib-dynload', '/usr/local/lib/python3.4/dist-packages', '/usr/lib/python3/dist-packages'] 6运行输出如下: $ python using_sys.py 参数1 参数2 命令行参数如下: using_sys.py 参数1 参数2 Python 路径为: ['/root', '/usr/lib/python3.4', '/usr/lib/python3.4/plat-x86_64-linux-gnu', '/usr/lib/python3.4/lib-dynload', '/usr/local/lib/python3.4/dist-packages', '/usr/lib/python3/dist-packages'] 7 $ python using_sys.py 参数1 参数2 命令行参数如下: using_sys.py 参数1 参数2 Python 路径为: ['/root', '/usr/lib/python3.4', '/usr/lib/python3.4/plat-x86_64-linux-gnu', '/usr/lib/python3.4/lib-dynload', '/usr/local/lib/python3.4/dist-packages', '/usr/lib/python3/dist-packages'] 8说明: 每个模块都有一个__name__属性,当其值是'__main__'时,表明该模块自身在运行,否则是被引入。dir() 函数 $ python using_sys.py 参数1 参数2 命令行参数如下: using_sys.py 参数1 参数2 Python 路径为: ['/root', '/usr/lib/python3.4', '/usr/lib/python3.4/plat-x86_64-linux-gnu', '/usr/lib/python3.4/lib-dynload', '/usr/local/lib/python3.4/dist-packages', '/usr/lib/python3/dist-packages'] 9如果没有给定参数,那么 dir() 函数会罗列出当前定义的所有名称: import module1[, module2[,... moduleN] 0 标准模块Python 本身带着一些标准的模块库,在 Python 库参考文档中将会介绍到(就是后面的"库参考文档")。有些模块直接被构建在解析器里,这些虽然不是一些语言内置的功能,但是他却能很高效的使用,甚至是系统级调用也没问题。这些组件会根据不同的操作系统进行不同形式的配置,比如 winreg 这个模块就只会提供给 Windows 系统。应该注意到这有一个特别的模块 sys ,它内置在每一个 Python 解析器中。变量 sys.ps1 和 sys.ps2 定义了主提示符和副提示符所对应的字符串: import module1[, module2[,... moduleN] 1 包包是一种管理 Python 模块命名空间的形式,采用"点模块名称"。比如一个模块的名称是 A.B, 那么他表示一个包 A中的子模块 B 。就好像使用模块的时候,你不用担心不同模块之间的全局变量相互影响一样,采用点模块名称这种形式也不用担心不同库之间的模块重名的情况。这样不同的作者都可以提供 NumPy 模块,或者是 Python 图形库。不妨假设你想设计一套统一处理声音文件和数据的模块(或者称之为一个"包")。现存很多种不同的音频文件格式(基本上都是通过后缀名区分的,例如: .wav,:file:.aiff,:file:.au,),所以你需要有一组不断增加的模块,用来在不同的格式之间转换。并且针对这些音频数据,还有很多不同的操作(比如混音,添加回声,增加均衡器功能,创建人造立体声效果),所以你还需要一组怎么也写不完的模块来处理这些操作。这里给出了一种可能的包结构(在分层的文件系统中): import module1[, module2[,... moduleN] 2在导入一个包的时候,Python 会根据 sys.path 中的目录来寻找这个包中包含的子目录。目录只有包含一个叫做 __init__.py 的文件才会被认作是一个包,主要是为了避免一些滥俗的名字(比如叫做 string)不小心的影响搜索路径中的有效模块。最简单的情况,放一个空的 :file:__init__.py就可以了。当然这个文件中也可以包含一些初始化代码或者为(将在后面介绍的) __all__变量赋值。用户可以每次只导入一个包里面的特定模块,比如: import module1[, module2[,... moduleN] 3这将会导入子模块:sound.effects.echo。 他必须使用全名去访问: import module1[, module2[,... moduleN] 4还有一种导入子模块的方法是: import module1[, module2[,... moduleN] 5这同样会导入子模块: echo,并且他不需要那些冗长的前缀,所以他可以这样使用: import module1[, module2[,... moduleN] 6还有一种变化就是直接导入一个函数或者变量: import module1[, module2[,... moduleN] 7 同样的,这种方法会导入子模块: echo,并且可以直接使用他的 echofilter() 函数: echofilter(input, output, delay=0.7, atten=4) 注意当使用from package import item这种形式的时候,对应的item既可以是包里面的子模块(子包),或者包里面定义的其他名称,比如函数,类或者变量。import语法会首先把item当作一个包定义的名称,如果没找到,再试图按照一个模块去导入。如果还没找到,恭喜,一个:exc:ImportError 异常被抛出了。反之,如果使用形如import item.subitem.subsubitem这种导入形式,除了最后一项,都必须是包,而最后一项则可以是模块或者是包,但是不可以是类,函数或者变量的名字。从一个包中导入*设想一下,如果我们使用 from sound.effects import *会发生什么?Python 会进入文件系统,找到这个包里面所有的子模块,一个一个的把它们都导入进来。但是很不幸,这个方法在 Windows平台上工作的就不是非常好,因为Windows是一个大小写不区分的系统。在这类平台上,没有人敢担保一个叫做 ECHO.py 的文件导入为模块 echo 还是 Echo 甚至 ECHO。(例如,Windows 95就很讨厌的把每一个文件的首字母大写显示)而且 DOS 的 8+3 命名规则对长模块名称的处理会把问题搞得更纠结。为了解决这个问题,只能烦劳包作者提供一个精确的包的索引了。导入语句遵循如下规则:如果包定义文件 __init__.py 存在一个叫做 __all__ 的列表变量,那么在使用 from package import * 的时候就把这个列表中的所有名字作为包内容导入。作为包 的作者,可别忘了在更新包之后保证 __all__ 也更新了啊。你说我就不这么做,我就不使用导入*这种用法,好吧,没问题,谁让你是老板呢。这里有一个例子,在:file:sounds/effects/__init__.py中包含如下代码: import module1[, module2[,... moduleN] 8这表示当你使用from sound.effects import *这种用法时,你只会导入包里面这三个子模块。如果 __all__ 真的没有定义,那么使用from sound.effects import *这种语法的时候,就不会导入包 sound.effects 里的任何子模块。他只是把包sound.effects和它里面定义的所有内容导入进来(可能运行__init__.py里定义的初始化代码)。这会把 __init__.py 里面定义的所有名字导入进来。并且他不会破坏掉我们在这句话之前导入的所有明确指定的模块。看下这部分代码: import module1[, module2[,... moduleN] 9这个例子中,在执行from...import前,包sound.effects中的echo和surround模块都被导入到当前的命名空间中了。(当然如果定义了__all__就更没问题了)通常我们并不主张使用*这种方法来导入模块,因为这种方法经常会导致代码的可读性降低。不过这样倒的确是可以省去不少敲键的功夫,而且一些模块都设计成了只能通过特定的方法导入。记住,使用from Package import specific_submodule这种方法永远不会有错。事实上,这也是推荐的方法。除非是你要导入的子模块有可能和其他包的子模块重名。如果在结构中包是一个子包(比如这个例子中对于包sound来说),而你又想导入兄弟包(同级别的包)你就得使用导入绝对的路径来导入。比如,如果模块sound.filters.vocoder 要使用包sound.effects中的模块echo,你就要写成 from sound.effects import echo。 #!/usr/bin/python3 # Filename: support.py def print_func( par ): print ("Hello : ", par) return 0无论是隐式的还是显式的相对导入都是从当前模块开始的。主模块的名字永远是"__main__",一个Python应用程序的主模块,应当总是使用绝对路径引用。包还提供一个额外的属性__path__。这是一个目录列表,里面每一个包含的目录都有为这个包服务的__init__.py,你得在其他__init__.py被执行前定义哦。可以修改这个变量,用来影响包含在包里面的模块和子包。这个功能并不常用,一般用来扩展包里面的模块。
2018年03月23日
137 阅读
0 评论
0 点赞
2018-03-23
Python3 MySQL 数据库连接
Python3 CGI编程Python3 网络编程 Python3 MySQL 数据库连接本文我们为大家介绍 Python3 使用 PyMySQL 连接数据库,并实现简单的增删改查。什么是 PyMySQL?PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Python MySQL 客户端库。PyMySQL 安装在使用 PyMySQL 之前,我们需要确保 PyMySQL 已安装。PyMySQL 下载地址:https://github.com/PyMySQL/PyMySQL。如果还未安装,我们可以使用以下命令安装最新版的 PyMySQL: $ pip install PyMySQL 如果你的系统不支持 pip 命令,可以使用以下方式安装:1、使用 git 命令下载安装包安装(你也可以手动下载): $ git clone https://github.com/PyMySQL/PyMySQL $ cd PyMySQL/ $ python3 setup.py install 2、如果需要制定版本号,可以使用 curl 命令来安装: $ # X.X 为 PyMySQL 的版本号 $ curl -L https://github.com/PyMySQL/PyMySQL/tarball/pymysql-X.X | tar xz $ cd PyMySQL* $ python3 setup.py install $ # 现在你可以删除 PyMySQL* 目录 注意:请确保您有root权限来安装上述模块。安装的过程中可能会出现"ImportError: No module named setuptools"的错误提示,意思是你没有安装setuptools,你可以访问https://pypi.python.org/pypi/setuptools 找到各个系统的安装方法。Linux 系统安装实例: $ wget https://bootstrap.pypa.io/ez_setup.py $ python3 ez_setup.py 数据库连接连接数据库前,请先确认以下事项: 您已经创建了数据库 TESTDB. 在TESTDB数据库中您已经创建了表 EMPLOYEE EMPLOYEE表字段为 FIRST_NAME, LAST_NAME, AGE, SEX 和 INCOME。 连接数据库TESTDB使用的用户名为 "testuser" ,密码为 "test123",你可以可以自己设定或者直接使用root用户名及其密码,Mysql数据库用户授权请使用Grant命令。 在你的机子上已经安装了 Python MySQLdb 模块。 如果您对sql语句不熟悉,可以访问我们的 SQL基础教程 实例:以下实例链接 Mysql 的 TESTDB 数据库:实例(Python 3.0+)#!/usr/bin/python3importpymysql# 打开数据库连接db=pymysql.connect("localhost","testuser","test123","TESTDB")# 使用 cursor() 方法创建一个游标对象 cursorcursor=db.cursor()# 使用 execute() 方法执行 SQL 查询cursor.execute("SELECT VERSION()")# 使用 fetchone() 方法获取单条数据.data=cursor.fetchone()print("Database version : %s"%data)# 关闭数据库连接db.close()执行以上脚本输出结果如下: Database version : 5.5.20-log 创建数据库表如果数据库连接存在我们可以使用execute()方法来为数据库创建表,如下所示创建表EMPLOYEE:实例(Python 3.0+)#!/usr/bin/python3importpymysql# 打开数据库连接db=pymysql.connect("localhost","testuser","test123","TESTDB")# 使用 cursor() 方法创建一个游标对象 cursorcursor=db.cursor()# 使用 execute() 方法执行 SQL,如果表存在则删除cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")# 使用预处理语句创建表sql="""CREATE TABLE EMPLOYEE ( FIRST_NAME CHAR(20) NOT NULL, LAST_NAME CHAR(20), AGE INT, SEX CHAR(1), INCOME FLOAT )"""cursor.execute(sql)# 关闭数据库连接db.close()数据库插入操作以下实例使用执行 SQL INSERT 语句向表 EMPLOYEE 插入记录:实例(Python 3.0+)#!/usr/bin/python3importpymysql# 打开数据库连接db=pymysql.connect("localhost","testuser","test123","TESTDB")# 使用cursor()方法获取操作游标cursor=db.cursor()# SQL 插入语句sql="""INSERT INTO EMPLOYEE(FIRST_NAME, LAST_NAME, AGE, SEX, INCOME) VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""try:# 执行sql语句cursor.execute(sql)# 提交到数据库执行db.commit()except:# 如果发生错误则回滚db.rollback()# 关闭数据库连接db.close()以上例子也可以写成如下形式:实例(Python 3.0+)#!/usr/bin/python3importpymysql# 打开数据库连接db=pymysql.connect("localhost","testuser","test123","TESTDB")# 使用cursor()方法获取操作游标cursor=db.cursor()# SQL 插入语句sql="INSERT INTO EMPLOYEE(FIRST_NAME, / LAST_NAME, AGE, SEX, INCOME) / VALUES ('%s', '%s', '%d', '%c', '%d' )"% /('Mac','Mohan',20,'M',2000)try:# 执行sql语句cursor.execute(sql)# 执行sql语句db.commit()except:# 发生错误时回滚db.rollback()# 关闭数据库连接db.close()以下代码使用变量向SQL语句中传递参数: .................................. user_id = "test123" password = "password" con.execute('insert into Login values("%s", "%s")' % / (user_id, password)) .................................. 数据库查询操作Python查询Mysql使用 fetchone() 方法获取单条数据, 使用fetchall() 方法获取多条数据。 fetchone(): 该方法获取下一个查询结果集。结果集是一个对象 fetchall():接收全部的返回结果行. rowcount: 这是一个只读属性,并返回执行execute()方法后影响的行数。 实例:查询EMPLOYEE表中salary(工资)字段大于1000的所有数据:实例(Python 3.0+)#!/usr/bin/python3importpymysql# 打开数据库连接db=pymysql.connect("localhost","testuser","test123","TESTDB")# 使用cursor()方法获取操作游标cursor=db.cursor()# SQL 查询语句sql="SELECT * FROM EMPLOYEE / WHERE INCOME > '%d'"%(1000)try:# 执行SQL语句cursor.execute(sql)# 获取所有记录列表results=cursor.fetchall()forrowinresults:fname=row[0]lname=row[1]age=row[2]sex=row[3]income=row[4]# 打印结果print("fname=%s,lname=%s,age=%d,sex=%s,income=%d"% /(fname,lname,age,sex,income))except:print("Error: unable to fetch data")# 关闭数据库连接db.close()以上脚本执行结果如下: fname=Mac, lname=Mohan, age=20, sex=M, income=2000 数据库更新操作更新操作用于更新数据表的的数据,以下实例将 TESTDB表中的 SEX 字段全部修改为 'M',AGE 字段递增1:实例(Python 3.0+)#!/usr/bin/python3importpymysql# 打开数据库连接db=pymysql.connect("localhost","testuser","test123","TESTDB")# 使用cursor()方法获取操作游标cursor=db.cursor()# SQL 更新语句sql="UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = '%c'"%('M')try:# 执行SQL语句cursor.execute(sql)# 提交到数据库执行db.commit()except:# 发生错误时回滚db.rollback()# 关闭数据库连接db.close()删除操作删除操作用于删除数据表中的数据,以下实例演示了删除数据表 EMPLOYEE 中 AGE 大于 20 的所有数据:实例(Python 3.0+)#!/usr/bin/python3importpymysql# 打开数据库连接db = pymysql.connect("localhost","testuser","test123","TESTDB")# 使用cursor()方法获取操作游标cursor=db.cursor()# SQL 删除语句sql="DELETE FROM EMPLOYEE WHERE AGE > '%d'"%(20)try:# 执行SQL语句cursor.execute(sql)# 提交修改db.commit()except:# 发生错误时回滚db.rollback()# 关闭连接db.close()执行事务事务机制可以确保数据一致性。事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。 原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。持久性(durability)。持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。Python DB API 2.0 的事务提供了两个方法 commit 或 rollback。实例实例(Python 3.0+)# SQL删除记录语句sql="DELETE FROM EMPLOYEE WHERE AGE > '%d'"%(20)try:# 执行SQL语句cursor.execute(sql)# 向数据库提交db.commit()except:# 发生错误时回滚db.rollback()对于支持事务的数据库, 在Python数据库编程中,当游标建立之时,就自动开始了一个隐形的数据库事务。commit()方法游标的所有更新操作,rollback()方法回滚当前游标的所有操作。每一个方法都开始了一个新的事务。错误处理DB API中定义了一些数据库操作的错误及异常,下表列出了这些错误和异常: 异常描述 Warning当有严重警告时触发,例如插入数据是被截断等等。必须是 StandardError 的子类。 Error警告以外所有其他错误类。必须是 StandardError 的子类。 InterfaceError当有数据库接口模块本身的错误(而不是数据库的错误)发生时触发。 必须是Error的子类。 DatabaseError和数据库有关的错误发生时触发。 必须是Error的子类。 DataError当有数据处理时的错误发生时触发,例如:除零错误,数据超范围等等。 必须是DatabaseError的子类。 OperationalError指非用户控制的,而是操作数据库时发生的错误。例如:连接意外断开、 数据库名未找到、事务处理失败、内存分配错误等等操作数据库是发生的错误。 必须是DatabaseError的子类。 IntegrityError完整性相关的错误,例如外键检查失败等。必须是DatabaseError子类。 InternalError数据库的内部错误,例如游标(cursor)失效了、事务同步失败等等。 必须是DatabaseError子类。 ProgrammingError程序错误,例如数据表(table)没找到或已存在、SQL语句语法错误、 参数数量错误等等。必须是DatabaseError的子类。 NotSupportedError不支持错误,指使用了数据库不支持的函数或API等。例如在连接对象上 使用.rollback()函数,然而数据库并不支持事务或者事务已关闭。 必须是DatabaseError的子类。
2018年03月23日
166 阅读
0 评论
0 点赞
2018-03-23
HTML 总结
HTML 速查列表XHTML 简介 你已经完成了 HTML 的学习,下一步该学习什么呢?HTML 总结本教程已教你如何使用 HTML 创建站点。HTML 是一种在 Web 上使用的通用标记语言。HTML 允许你格式化文本,添加图片,创建链接、输入表单、框架和表格等等,并可将之存为文本文件,浏览器即可读取和显示。HTML 的关键是标签,其作用是指示将出现的内容。如需更多关于 HTML 的信息,请查看我们的 HTML 教程 和 HTML 参考手册 。现在,你已学完HTML,接下来该学习什么呢?学习 CSSCSS被用来同时控制多重网页的样式和布局。通过使用 CSS,所有的格式化均可从 HTML 中剥离出来,并存储于一个独立的文件中。如需学习如何创建样式表,请访问我们的 CSS 教程 。学习 JavaScriptJavaScript 可以让你的网页更加生动。如果你只想展示内容,静态网站是很好的展示形象,如果你想与用户进行交换或者让网页更加生动那就需要使用到Javascript。JavaScript是互联网上最流行的脚本语言,目前所有主流浏览器都支持Javascript。如果你想学习更多关于Javascript的知识,可以访问本站的JavaScript 教程.站点服务器在自己的服务器上托管网站始终是一个选项。有几点需要考虑:硬件支出如果要运行"真正"的网站,您不得不购买强大的服务器硬件。不要指望低价的 PC 能够应付这些工作。您还需要稳定的(一天 24 小时)高速连接。软件支出请记住,服务器授权通常比客户端授权更昂贵。同时请注意,服务器授权也许有用户数量限制。人工费不要指望低廉的人工费用。您必须安装自己的硬件和软件。您同时要处理漏洞和病毒,以确保您的服务器时刻正常地运行于一个"任何事都可能发生"的环境中。使用因特网服务提供商(ISP)从 ISP 租用服务器也很常见。大多数小公司会把网站存放到由 ISP 提供的服务器上。其优势有以下几点:连接速度大多数 ISP 都拥有连接因特网的高速连接。强大的硬件ISP 的 web 服务器通常强大到能够由若干网站分享资源。您还要看一下 ISP 是否提供高效的负载平衡,以及必要的备份服务器。安全性和可靠性ISP 是网站托管方面的专家。他们应该提供 99% 以上的在线时间,最新的软件补丁,以及最好的病毒防护。选择 ISP 时的注意事项24 小时支持确保 ISP 提供 24 小时支持。不要使自己置于无法解决严重问题的尴尬境地,同时还必须等待第二个工作日。如果您不希望支付长途电话费,那么免费电话服务也是必要的。每日备份确保 ISP 会执行每日备份的例行工作,否则您有可能损失有价值的数据。流量研究一下 ISP 的流量限制。如果出现由于网站受欢迎而激增的不可预期的访问量,那么您要确保不会因此支付额外费用。带宽或内容限制研究一下 ISP 的带宽和内容限制。如果您计划发布图片或播出视频或音频,请确保您有此权限。E-mail 功能请确保 ISP 支持您需要的 e-mail 功能。数据库访问如果您计划使用网站数据库中的数据,那么请确保您的 ISP 支持您需要的数据库访问。在您选取一家 ISP 之前,请务必阅读菜鸟教程的 Web 主机教程。
2018年03月23日
137 阅读
0 评论
0 点赞
2018-03-23
HTML 媒体(Media)
HTML5 服务器发送事件(Server-Sent Events)HTML 插件 HTML多媒体Web 上的多媒体指的是音效、音乐、视频和动画。现代网络浏览器已支持很多多媒体格式。什么是多媒体?多媒体来自多种不同的格式。它可以是您听到或看到的任何内容,文字、图片、音乐、音效、录音、电影、动画等等。在因特网上,您会经常发现嵌入网页中的多媒体元素,现代浏览器已支持多种多媒体格式。在本教程中,您将了解到不同的多媒体格式,以及如何在您的网页中使用它们。浏览器支持第一款因特网浏览器只支持文本,而且即使是对文本的支持也仅限于单一字体和单一颜色。随后诞生了支持颜色、字体和文本样式的浏览器,图片支持也被加入。不同的浏览器以不同的方式处理对音效、动画和视频的支持。某些元素能够以内联的方式处理,而某些则需要额外的插件。您将在下面的章节学习更多有关插件的知识。多媒体格式格式 多媒体元素(比如视频和音频)存储于媒体文件中。确定媒体类型的最常用的方法是查看文件扩展名。当浏览器得到文件扩展名 .htm 或 .html 时,它会假定该文件是 HTML 页面。.xml 扩展名指示 XML 文件,而 .css 扩展名指示样式表。图片格式则通过 .gif 或 .jpg 来识别。多媒体元素元素也拥有带有不同扩展名的文件格式,比如 .swf、.wmv、.mp3 以及 .mp4。视频格式 MP4是互联网推出新的视频格式。YouTube 推荐使用 MP4 。Flash Players 支持 MP4HTML5 支持 MP4。 格式 文件 描述 AVI .avi AVI (Audio Video Interleave) 格式是由微软开发的。所有运行 Windows 的计算机都支持 AVI 格式。它是因特网上很常见的格式,但非 Windows 计算机并不总是能够播放。 WMV .wmv Windows Media 格式是由微软开发的。Windows Media 在因特网上很常见,但是如果未安装额外的(免费)组件,就无法播放 Windows Media 电影。一些后期的 Windows Media 电影在所有非 Windows 计算机上都无法播放,因为没有合适的播放器。 MPEG .mpg .mpeg MPEG (Moving Pictures Expert Group) 格式是因特网上最流行的格式。它是跨平台的,得到了所有最流行的浏览器的支持。 QuickTime .mov QuickTime 格式是由苹果公司开发的。QuickTime 是因特网上常见的格式,但是 QuickTime 电影不能在没有安装额外的(免费)组件的 Windows 计算机上播放。 RealVideo .rm .ram RealVideo 格式是由 Real Media 针对因特网开发的。该格式允许低带宽条件下(在线视频、网络电视)的视频流。由于是低带宽优先的,质量常会降低。 Flash .swf .flv Flash (Shockwave) 格式是由 Macromedia 开发的。Shockwave 格式需要额外的组件来播放。但是该组件会预装到 Firefox 或 IE 之类的浏览器上。 Mpeg-4 .mp4 Mpeg-4 (with H.264 video compression) 是一种针对因特网的新格式。事实上,YouTube 推荐使用 MP4。YouTube 接收多种格式,然后全部转换为 .flv 或 .mp4 以供分发。越来越多的视频发布者转到 MP4,将其作为 Flash 播放器和 HTML5 的因特网共享格式。 最新的 HTML5 标准只支持 MP4, WebM, 和 Ogg 视频格式。 声音格式MP3是一种音频压缩技术,其全称是动态影像专家压缩标准音频层面3(Moving Picture Experts Group Audio Layer III),简称为MP3。它被设计用来大幅度地降低音频数据量。如果你的站点是音乐类型的,你可以选择mp3格式。 格式 文件 描述 MIDI .mid .midi MIDI (Musical Instrument Digital Interface) 是一种针对电子音乐设备(比如合成器和声卡)的格式。MIDI 文件不含有声音,但包含可被电子产品(比如声卡)播放的数字音乐指令。点击这里播放 The Beatles。因为 MIDI 格式仅包含指令,所以 MIDI 文件极其小巧。上面的例子只有 23k 的大小,但却能播放将近 5 分钟。MIDI 得到了广泛的平台上的大量软件的支持。大多数流行的网络浏览器都支持 MIDI。 RealAudio .rm .ram RealAudio 格式是由 Real Media 针对因特网开发的。该格式也支持视频。该格式允许低带宽条件下的音频流(在线音乐、网络音乐)。由于是低带宽优先的,质量常会降低。 Wave .wav Wave (waveform) 格式是由 IBM 和微软开发的。所有运行 Windows 的计算机和所有网络浏览器(除了 Google Chrome)都支持它。 WMA .wma WMA 格式 (Windows Media Audio),质量优于 MP3,兼容大多数播放器,除了 iPod。WMA 文件可作为连续的数据流来传输,这使它对于网络电台或在线音乐很实用。 MP3 .mp3 .mpga MP3 文件实际上是 MPEG 文件的声音部分。MPEG 格式最初是由运动图像专家组开发的。MP3 是其中最受欢迎的针对音乐的声音格式。期待未来的软件系统都支持它。 HTML5 的最新标准支持 MP3, WAV, 和 Ogg 音频格式。
2018年03月23日
172 阅读
0 评论
0 点赞
2018-03-22
HTML 音频(Audio)
HTML 插件HTML视频(Videos)播放 HTML 音频(Audio)声音在HTML中可以以不同的方式播放.问题以及解决方法在 HTML 中播放音频并不容易!您需要谙熟大量技巧,以确保您的音频文件在所有浏览器中(Internet Explorer, Chrome, Firefox, Safari, Opera)和所有硬件上(PC, Mac , iPad, iPhone)都能够播放。在本章,菜鸟教程为您总结了问题和解决方法。使用插件浏览器插件是一种扩展浏览器标准功能的小型计算机程序。插件可以使用 <object> 标签 或者 <embed> 标签添加在页面上. 这些标签定义资源(通常非 HTML 资源)的容器,根据类型,它们即会由浏览器显示,也会由外部插件显示。使用 <embed> 元素<embed>标签定义外部(非 HTML)内容的容器。(这是一个 HTML5 标签,在 HTML4 中是非法的,但是所有浏览器中都有效)。下面的代码片段能够显示嵌入网页中的 MP3 文件:实例<embed height="50" width="100" src="horse.mp3">尝试一下 »问题: <embed> 标签在 HTML 4 中是无效的。页面无法通过 HTML 4 验证。 不同的浏览器对音频格式的支持也不同。 如果浏览器不支持该文件格式,没有插件的话就无法播放该音频。 如果用户的计算机未安装插件,无法播放音频。 如果把该文件转换为其他格式,仍然无法在所有浏览器中播放。 使用 <object> 元素<object tag> 标签也可以定义外部(非 HTML)内容的容器。下面的代码片段能够显示嵌入网页中的 MP3 文件:实例<object height="50" width="100" data="horse.mp3"></object>尝试一下 »问题: 不同的浏览器对音频格式的支持也不同。 如果浏览器不支持该文件格式,没有插件的话就无法播放该音频。 如果用户的计算机未安装插件,无法播放音频。 如果把该文件转换为其他格式,仍然无法在所有浏览器中播放。 使用 HTML5 <audio> 元素HTML5 <audio> 元素是一个 HTML5 元素,在 HTML 4 中是非法的,但在所有浏览器中都有效。The <audio> element works in all modern browsers.以下我们将使用 <audio> 标签来描述 MP3 文件(Internet Explorer、Chrome 以及 Safari 中是有效的), 同样添加了一个 OGG 类型文件(Firefox 和 Opera浏览器中有效).如果失败,它会显示一个错误文本信息:实例<audio controls> <source src="horse.mp3" type="audio/mpeg"> <source src="horse.ogg" type="audio/ogg"> Your browser does not support this audio format.</audio>尝试一下 »问题: <audio> 标签在 HTML 4 中是无效的。您的页面无法通过 HTML 4 验证。 您必须把音频文件转换为不同的格式。 <audio> 元素在老式浏览器中不起作用。 最好的 HTML 解决方法下面的例子使用了两个不同的音频格式。HTML5 <audio> 元素会尝试以 mp3 或 ogg 来播放音频。如果失败,代码将回退尝试 <embed> 元素。实例<audio controls height="100" width="100"> <source src="horse.mp3" type="audio/mpeg"> <source src="horse.ogg" type="audio/ogg"> <embed height="50" width="100" src="horse.mp3"></audio>尝试一下 »问题: 您必须把音频转换为不同的格式。 <embed> 元素无法回退来显示错误消息。 雅虎媒体播放器 - 一个简单的添加音频到你网站上的方式使用雅虎播放器是免费的。如需使用它,您需要把这段 JavaScript 插入网页底部:雅虎播放器可以播放MP3以及其他各种格式。你只需添加一行代码到你的页面或 博客中就可以轻松地将您的HTML页面制作成 专业的播放列表:实例<a href="horse.mp3">Play Sound</a><script src="http://mediaplayer.yahoo.com/latest"></script>尝试一下 »如果你要使用它,您需要把这段 JavaScript 插入网页底部:<script src="http://mediaplayer.yahoo.com/latest"></script>然后只需简单地把 MP3 文件链接到您的 HTML 中,JavaScript 会自动地为每首歌创建播放按钮:<a href="song1.mp3">Play Song 1</a><a href="song2.wav">Play Song 2</a>......雅虎媒体播放器为您的用户提供的是一个小型的播放按钮,而不是完整的播放器。不过,当您点击该按钮,会弹出完整的播放器。请注意,这个播放器始终停靠在窗框底部。只需点击它,就可将其滑出。使用超链接如果网页包含指向媒体文件的超链接,大多数浏览器会使用"辅助应用程序"来播放文件。以下代码片段显示指向 mp3 文件的链接。如果用户点击该链接,浏览器会启动"辅助应用程序"来播放该文件:实例<a href="horse.mp3">Play the sound</a>尝试一下 »内联的声音说明当您在网页中包含声音,或者作为网页的组成部分时,它被称为内联声音。如果您打算在 web 应用程序中使用内联声音,您需要意识到很多人都觉得内联声音令人恼火。同时请注意,用户可能已经关闭了浏览器中的内联声音选项。我们最好的建议是只在用户希望听到内联声音的地方包含它们。一个正面的例子是,在用户需要听到录音并点击某个链接时,会打开页面然后播放录音。HTML 多媒体标签New : HTML5 新标签 标签 描述 <embed> 定义内嵌对象。HTML4 中不赞成,HTML5 中允许。 <object> 定义内嵌对象。 <param> 定义对象的参数。 <audio>New 定义了声音内容 <video>New 定义一个视频或者影片 <source>New 定义了media元素的多媒体资源(<video> 和 <audio>) <track>New 规定media元素的字幕文件或其他包含文本的文件 (<video> 和<audio>)
2018年03月22日
152 阅读
0 评论
0 点赞
1
...
6
7
8