4)用Python查询数据库中的数据,并压缩Access数据库文件
如果我们要查询2012年1月21日当天,我们所有华为产品的销售情况该如何做?这时我们将传递一句SQL查询至Access数据库,并获得数据库查询所得的结果返回为Python中的变量。
首先,传递SQL查询语句至Access数据库:
>>>cur.execute('''SELECT * FROM saleout WHERE product_name LIKE '%Huawei%'''')
然后,从数据库查询结果抓取结果集的字段名信息:
>>>for d in cur.description:
print d[0],
id customer_name product_name price volume sell_time
交互界面将显示出各字段的名称。我们接下来把结果集一行一行显示在屏幕上:
>>>for row in cur.fetchall():
for field in row:
print field,
print ''
1 江文 Huawei Ascend mate 5000.5 2 2012-01-21 00:00:00
3 郑现实 Huawei Ascend D2 5100.5 1 2012-01-22 00:00:00
4 莫小闵 Huawei Ascend D2 5000.5 1 2012-01-22 00:00:00
5 顾小白 Huawei Ascend mate 5000.5 1 2012-01-22 00:00:00
这样就显示出了所有的结果集。
对于Access数据库,在长久的数据插入使用后,Access数据库文件可能变得非常臃肿庞大。PyPyODBC提供了另一个特色功能,能够直接在Python程序中用代码调用清理压缩数据库。我们现在将D:\salesdb.mdb压缩生成另外一个文件salesdb_backup.mdb:
首先,关闭数据库连接:
>>>conn.close()
然后,使用pypyodbc的win_compact_mdb方法清理压缩数据库文件:
>>>pypyodbc.win_compact_mdb('D:\\salesdb.mdb','D:\\salesdb_backup.mdb')
这时会发现另外一个清理压缩过的文件salesdb_backup.mdb产生在D盘下,这时大小和原来的数据库没有大差别,但在数据库长时间频繁的使用后,压缩清理的效果会非常惊人。
保持成Python程序文件与总结
前面的教程中,我们使用了Python的交互式界面,一行代码一行代码地操纵Python完成了个个步骤。我们可以把这些代码记在一个后缀名为py的文本文件中,这样Python就会按照文本文件中的代码顺序执行。本教程中的代码程序可以在 sales_sample.py 上下载获得。
可能有的读者会提问,这篇教程讲述的是对Access数据库进行操作,其他数据库怎么操作呢?其实,只要你使用的数据库支持ODBC(笔者还没听说过不支持ODBC的关系型数据库),那就可以用pypyodbc对数据库进行操作。pypyodbc目前已知支持的数据库有:Access,SQLServer,MySQL,PostgreSQL甚至,Excel。
还是那句中国古话,师傅领进门,修行靠自身。希望本文能为读者开启一扇Python学用之门。