您的位置:首页 > 数据库

Python数据库编程入门教程

2013-02-05 21:12 501 查看
这年头,还拿打印"Hello World"做教程?毛主席说了,你这不是耍流氓么!这个时代,数据库是王道!今天,我就用一个简单实用的销售数据库开发案例来引导感兴趣的读者入门Python数据库编程技术。我们将使用Python创建一个简单的Access销售数据库,使用ODBC功能对数据库插入删除销售记录,最后对数据库中的数据进行查询。下面将是我们将会一步步完成的编程步骤:

1)介绍和安装Python及ODBC模块pypyodbc;

2)创建一个Access数据库,并在此数据库中建立相应的销售记录表;

3)向销售记录表中插入记录,记载销售交易情况;

4)用Python查询数据库中的数据,并压缩Access数据库文件。

咱们这就开始!

1)安装Python和pypyodbc模块

Python可以在 www.python.org 中下载。本教程中我们下载的版本是Python 2.7.3,尽管它是一个编程平台,和普通程序一样,选择好安装本地安装路径,一路按“下一步”就可以完成安装。

--有很多人会问,为什么不选择最新的Python 3.X?在今日(2013年1月20日)笔者观点是:如果你想很快就开始用Python开发实际的系统,那么就应该选择Python 2.7。Python 3.X是未来的方向,但由于3.X版本没有很好的向下兼容性,很多可以在Python 2.X中使用的功能模块目前在Python 3.X中尚无法使用,例如本例中将用来连接和操作ODBC的pypyodbc模块。Python 3.X的面包和牛奶都在准备中,但还需要一段时间。

接下来,我们需要安装pypyodbc模块。pypyodbc是一个用纯Python语言(Python的强大功能可见一斑)写的调用操作系统ODBC功能的单脚本模块,非常推荐,很强大(好吧,pypyodbc是笔者创建的

)。安装pypyodbc的方式为:

http://code.google.com/p/pypyodbc/downloads/list 下载pypyodbc文件,目前最新的是 pypyodbc-0.9.1-SVN-r206.zip





下载后解压到一个临时目录中,双击目录中的setup.py文件即可安装此模块。





在本教程中,我们会在Python交互窗口中直接下命令,因此请用上述方法安装pypyodbc。今后在项目中,我们也可以将zip压缩包中的pypyodbc.py解压出来,放置于我们将要写的脚本的同一个目录下,也可以直接在脚本中调用它了,无需单独安装。

准备完毕,我们可以开始用Python编写代码了!

2)创建一个Access数据库,并在此数据库中建立相应的销售记录表

从这里开始,我们将开始真正变身为一名光荣的Python码农,而我作为码农教练,从你们洒下第一行Python代码开始,我将详细讲它们的作用。我们首先会在Python的交互界面一步一步完成代码动作,以了解每一步的效果,最后我们会将这些交互代码集中到一个脚本文件中去,真正成为一个程序。

我们先打开Python交互界面:从Windows开始菜单找到Python 2.7目录,点击运行Python 2.7下面的Python (Command Line),会有一个黑底白字的文本输入窗口跳出,含有如下字样。

Python 2.7.3 (default, Apr 10 2012, 23:31:26) [MSC v.1500 32 bit (Intel)] on win32

Type "copyright", "credits" or "license()" for more information.

>>>

这说明你已经可以在这个>>>符号后敲入Python代码命令,操纵Python完成一步步动作了。我们一步一步来:

第一步:我们命令Python从它众多的模块库中,找出刚刚为它安装好的pypyodbc模块,供我们在接下来的步骤中使用。

>>> import pypyodbc





第二步:我们要创建一个Access数据库,用以存放销售数据。这是PyPyODBC的一个特色功能,可以方便地在Windows平台下创建空白的Access数据库。Access数据库起名为salesdb.mdb,我们把它放在D盘根目录下。

>>> pypyodbc.win_create_mdb('D:\\salesdb.mdb')

这时你可以看见在D盘下有一个salesdb.mdb的Access空白数据库文件被产生。





第三步:使用Access的ODBC连接字符串,通过pypyodbc模块获得一个可以连接到salesdb.mdb数据库的ODBC连接对象conn:

>>>conn = pypyodbc.connect('Driver={Microsoft Access Driver (*.mdb)};DBQ=D:\\salesdb.mdb')

并从这个连接对象中,获取一个数据库操作游标cur:

>>>cur = conn.cursor()

第四步,在数据库中新建一个销售记录表saleout

我们使用该游标的execute命令向Access数据库传递一句SQL命令,创建一个名为saleout的表:

>>>cur.execute('''CREATE TABLE saleout (

ID COUNTER PRIMARY KEY,

customer_name VARCHAR(25),

product_name VARCHAR(30),

price float,

volume int,

sell_time datetime);''')

这样数据库下就创建了一个含有表字段:ID(编号),customer_name(顾客名),product_name(商品名),price(出售价格),volume(数量)和sell_time(出售时间)的表。

最后,我们把前面的操作一次性提交,让它们在数据库中正式生效。

>>>cur.commit()

3)向销售记录表中插入记录,记载销售交易情况

数据库创建好后,我们就可以往里面记载销售情况了。

第一步,我们记录一位江先生(江文)的顾客,于2013年1月21日,花5000.5元买了两部华为Ascend mate手机:

>>>cur.execute('''INSERT INTO saleout(customer_name,product_name,price,volume,sell_time)

VALUES(?,?,?,?,?)''',(u'江文','Huawei Ascend mate','5000.5',2,'2012-1-21'))

别忘了立即提交,使该笔记录正式在数据库中生效:

>>>cur.commit()

接下来我们再批量记录一批销售:

>>>cur.execute('''INSERT INTO saleout(customer_name,product_name,price,volume,sell_time)

VALUES(?,?,?,?,?)''',(u'杨天真','Apple IPhone 5','6000.1',1,'2012-1-21'))

>>>cur.execute('''INSERT INTO saleout(customer_name,product_name,price,volume,sell_time)

VALUES(?,?,?,?,?)''',(u'郑现实','Huawei Ascend D2','5100.5',1,'2012-1-22'))

>>>cur.execute('''INSERT INTO saleout(customer_name,product_name,price,volume,sell_time)

VALUES(?,?,?,?,?)''',(u'莫小闵','Huawei Ascend D2','5200.5',1,'2012-1-22'))

>>>cur.execute('''INSERT INTO saleout(customer_name,product_name,price,volume,sell_time)

VALUES(?,?,?,?,?)''',(u'顾小白','Huawei Ascend mate','5000.5',1,'2012-1-22'))

立即提交,使这4笔记录正式在数据库中同时正式生效:

>>>cur.commit()

至此,我们已经在系统中记录了5笔销售。在下面的步骤中,我们将查询这些记录。

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学用之门。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: