[原创]Python基础知识小结(1)

转载请注明出处:http://www.codelast.com/

本文『很傻很天真』,熟悉Python的人都不用看了。环境:未特别注明的话,均为Python 3.2.3,IDE:PyCharm,特别注明了的话,则为注明的版本『1』Python访问MySQL听说很多人都使用著名的MySQLdb来访问MySQL,但是它并不支持Python 3.x的版本。所以要另寻出路。那就是mysql-connector-python,这个貌似是MySQL官方提供的,并且它不依赖于MySQL C客户端library,我下载的是1.1.4版本,下载解压之后,会看到setup.py文件,这样安装:

sudo python3.2 setup.py install

然后在程序中就可以用了。文章来源:http://www.codelast.com/下面给出一段查询MySQL记录的示例代码:

import mysql.connectorimport sys__author__ = 'codelast'username = 'root'password = 'xxx'host = '127.0.0.1'db = 'mydb'connection = mysql.connector.connect(user=username, password=password, host=host, database=db)cursor = connection.cursor()sql = "SELECT * FROM my_table WHERE id = 9"try:    cursor.execute(sql)    # 打印查询到的记录的行数    data = cursor.fetchall()    print(len(data))    # 输出所有记录    for (ID, name) in data:        print("name:[%s]" % (name))except mysql.connector.Error as err:    print("Failed to query table, detail: {}".format(err.msg))    sys.exit()connection.commit()cursor.close()connection.close()

上面的代码很简单,无非就是从my_table表里查询一些记录,再打印出来。注意 for (ID, name) 中的括号里要写全该表中,你查询的所有字段名,否则会报错。还有其他遍历查询结果的方法,后面会继续陈述。

『2』逆序遍历list

myList = [1, 2, 3]for item in reversed(myList):    print(item)

输出:

321

注意是 reversed 不是 reverse。这只是逆序遍历,myList中的数据顺序并不会改变。文章来源:http://www.codelast.com/『3』在Windows下安装Python的lxml库Python版本:2.7.3理论上来说,用easy_install.exe来安装是非常容易的,但是我遇到了一个接一个的问题,于是,我解决之后打算把过程写下来——我在Windows下有两个版本的Python版本,其中一个是比较旧的2.7.3(而不是本文一开始说的3.x版),于是我在命令行里cd到2.7.3这个版本的安装目录下的Scripts子目录下,执行:

easy_install.exe lxml==2.3.4

为什么要指定版本呢?因为我就是需要这个版本的lxml。然后经过一段时间的等待之后,出现了下面的错误提示:

Building lxml version 2.3.4.Building without Cython.ERROR: 'xslt-config' 不是内部或外部命令,也不是可运行的程序或批处理文件。** make sure the development packages of libxml2 and libxslt are installed **Using build configuration of libxslterror: Setup script exited with error: Unable to find vcvarsall.bat

文章来源:http://www.codelast.com/好吧,貌似它让我先装 libxml2 和 libxslt,于是我再用 easy_install.exe 尝试了一下安装指定版本的 libxml2,就是搜不到安装包,累了,到Google上一查,在stackoverflow上找到一个问题,某人给出了一个解决办法:可以从 http://www.lfd.uci.edu/~gohlke/pythonlibs/ 下载预编译的版本(.exe可执行程序,win32和x86-64的版本都朋),安装即可,非常方便。我照做了,果然OK了,PyCharm中也自动识别了lxml,搞定。

『4』使用MySQLdb访问数据库时,“TypeError: execute() takes at most 3 arguments (4 given)”错误的解决办法Python版本:2.7.3使用2.7.3版本的Python时,访问MySQL的最佳方案应该数使用MySQLdb了。如果在执行SQL时,你遇到了上面所说的问题,那么你可能是像下面这样写导致的:

sql = "INSERT INTO my_table (field1, field2) VALUES (%s, %s)"cursor.execute(sql, "a", "b")

这是错误的,其实这货根本不是这样用的,当参数多于一个时,你要把它们放在一个tuple里传进去:

sql = "INSERT INTO my_table (field1, field2) VALUES (%s, %s)"cursor.execute(sql, ("a", "b"))

例如这个链接有个例子。

『5』使用 lxml 库生成XML(字符串)Python版本:2.7.3直接看代码:

#coding:UTF-8"""XML生成器。文件名:xmlGenerator.py"""__author__ = 'Darran Zhang @ codelast.com'from lxml import etreeclass XMLGenerator:    def __init__(self):        pass    def generate_xml(self):        commands = etree.Element('Commands')        command = etree.SubElement(commands, 'Command')        from_user = etree.SubElement(command, 'FromUser')        from_user.text = u'abc'        cmd = etree.SubElement(command, 'Cmd')        cmd.text = u'mmmmmmmmmmmmmm'        cmd_extra_data = etree.SubElement(command, 'CmdExtraData')        cmd_extra_data.text = u'eeeeeeeeee'        return etree.tostring(commands, pretty_print=True, xml_declaration=True, encoding='utf-8')

测试代码:

from xmlGenerator import XMLGeneratorxmlGen = XMLGenerator()print(xmlGen.generate_xml())

文章来源:http://www.codelast.com/输出:

<?xml version='1.0' encoding='utf-8'?><Commands>  <Command>    <FromUser>abc</FromUser>    <Cmd>mmmmmmmmmmmmmm</Cmd>    <CmdExtraData>eeeeeeeeee</CmdExtraData>  </Command></Commands>

可见非常简单。

『6』在PyCharm中无法安装MySQL-python这个package的一个解决办法在PyCharm中可以直接搜索Python package并安装,我遇到的一个问题是:无法安装,错误提示的其中一段为:

EnvironmentError: mysql_config not found

你需要保证你的Ubuntu已经安装了以下这些东西:

sudo apt-get install mysql-server mysql-client libmysqlclient-dev

然后再试,一切OK。

『7』"ValueError: zero length field name in format"错误的解决办法Python版本:2.6.6错误出在如下语句:

"{}\t{}".format(123, 456)

我遇到的出问题的Python版本为2.6.6(不知道是不是2.6.*及低版本都有此问题),反正Python 2.7.3就没有这个问题了。上面的代码无非主就是把123和456代替两个大括号。在旧版本的Python上(具体从哪个版本开始不用这样写,我不确定),你要有多个需要format的field时,需要指定它们的顺序:

"{0}\t{1}".format(123, 456)

这样就没问题了。

『8』对一个字典(dict),按value进行排序Python版本:2.6.6,2.6.9均测试可用(Python3里没有cmp方法了,所以不能用)

sortedList = sorted(myDict.items(), lambda x, y: cmp(x[1], y[1]), reverse=True)for (k, v) in sortedList:    print("{0}\t{1}".format(k,v))

其中,myDict是你要将其排序的字典,sortedList是排序之后的结果,变成了一个list,里面是若干个tuple,每个tuple里是一对(key,value),所以后面用那样的方式对它进行了遍历。文章来源:http://www.codelast.com/『9』判断一个字典(dict)中是否包含指定的key

d = dict()# 向字典中添加两个元素d[1] = 'abc'd[2] = 'def'# 检查 3 这个key是否在字典中,结果输出的是“NO”if 3 in d:    print('YES')else:    print('NO')

『10』To be added…

[原创]Python基础知识小结(1)

相关文章:

你感兴趣的文章:

标签云: