python与数据库编程_Python数据库编程⼊门教程
这年头,还拿打印”Hello World”做教程?⽑主席说了,你这不是耍流氓么!这个时代,数据库是王道!今天,我就⽤⼀个简单实⽤的销售数据库开发案例来引导感兴趣的读者⼊门Python数据库编程技术。我们将使⽤Python创建⼀个简单的Access销售数据库,使⽤ODBC 功能对数据库插⼊删除销售记录,最后对数据库中的数据进⾏查询。下⾯将是我们将会⼀步步完成的编程步骤:
1)介绍和安装Python及ODBC模块pypyodbc;
2)创建⼀个Access数据库,并在此数据库中建⽴相应的销售记录表;
3)向销售记录表中插⼊记录,记载销售交易情况;
4)⽤Python查询数据库中的数据,并压缩Access数据库⽂件。
咱们这就开始!
1)安装Python和pypyodbc模块
心跳歌词
Python可以在   中下载。本教程中我们下载的版本是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的⽅式为:
下载后解压到⼀个临时⽬录中,双击⽬录中的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 = t(‘Driver={Microsoft Access Driver (*.mdb)};DBQ=D:\\salesdb.mdb’)
并从这个连接对象中,获取⼀个数据库操作游标cur:
>>>cur = conn.cursor()
第四步,在数据库中新建⼀个销售记录表saleout
上海第二工业大学专科
我们使⽤该游标的execute命令向Access数据库传递⼀句SQL命令,创建⼀个名为saleout的表:
>>&ute(‘‘‘CREATE TABLE saleout (
ID COUNTER PRIMARY KEY,
customer_name VARCHAR(25),
product_nameVARCHAR(30),
price float,
volume int,
辽宁高考成绩查询时间
sell_time datetime);”’)
这样数据库下就创建了⼀个含有表字段:ID(编号),customer_name(顾客名),product_name(商品名),price(出售价格),volume(数量)和sell_time(出售时间)的表。
最后,我们把前⾯的操作⼀次性提交,让它们在数据库中正式⽣效。
>>>curmit()
3)向销售记录表中插⼊记录,记载销售交易情况
数据库创建好后,我们就可以往⾥⾯记载销售情况了。
第⼀步,我们记录⼀位江先⽣(江⽂)的顾客,于2013年1⽉21⽇,花5000.5元买了两部华为Ascend mate⼿机:
>>&ute(”‘INSERT INTO saleout(customer_name,product_name,price,volume,sell_time)
VALUES(?,?,?,?,?)”’,(u’江⽂’,‘Huawei Ascend mate’,‘5000.5′,2,‘2012-1-21′))
别忘了⽴即提交,使该笔记录正式在数据库中⽣效:
>>>curmit()
接下来我们再批量记录⼀批销售:
>>&ute(”‘INSERT INTO saleout(customer_name,product_name,price,volume,sell_time)
VALUES(?,?,?,?,?)”’,(u’杨天真’,‘Apple IPhone 5′,‘6000.1′,1,‘2012-1-21′))
>>&ute(”‘INSERT INTO saleout(customer_name,product_name,price,volume,sell_time)
VALUES(?,?,?,?,?)”’,(u’郑现实’,‘Huawei Ascend D2′,‘5100.5′,1,‘2012-1-22′))
胡海泉个人资料
>>&ute(”‘INSERT INTO saleout(customer_name,product_name,price,volume,sell_time)
VALUES(?,?,?,?,?)”’,(u’莫⼩闵’,’HuaweiAscend D2‘,‘5200.5′,1,‘2012-1-22′))
>>&ute(”‘INSERT INTO saleout(customer_name,product_name,price,volume,sell_time)
VALUES(?,?,?,?,?)”’,(u’顾⼩⽩’,’HuaweiAscend mate‘,‘5000.5′,1,‘2012-1-22′))
⽴即提交,使这4笔记录正式在数据库中同时正式⽣效:
>>>curmit()
⾄此,我们已经在系统中记录了5笔销售。在下⾯的步骤中,我们将查询这些记录。
4)⽤Python查询数据库中的数据,并压缩Access数据库⽂件
如果我们要查询2012年1⽉21⽇当天,我们所有华为产品的销售情况该如何做?这时我们将传递⼀句SQL查询⾄Access数据库,并获得数据库查询所得的结果返回为Python中的变量。
⾸先,传递SQL查询语句⾄Access数据库:
>>&ute(”‘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.
高考20145 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学⽤之门。