【问题】如何在Python中操作数据库

关系型数据库的强项在于数据的存储和数据的处理。但是它缺乏对于商业逻辑、界面等的操作能力。通用语言(或脚本语言,如python等)的强项在于商业逻辑部分,但是对于大量数据存储和处理还有赖于关系型数据库的能力。因此,当遇到一个实际问题,既需要对数据进行存储、查询,并进行比较复杂的其它处理(如URL,正则表达式分析等)的时候就需要把这些工具共同来使用了。

这也就引出了一个问题:如何进行两种系统和语言的互操作。

我们常常遇到的是通过编程语言(如Python)来操作数据库,在这种情况下,需要使用的就是相应的驱动,也就是说将数据库语句(DDL,DML,DQL等)直接操作的能力,之后对返回的结果集进行处理和分析,如果返回错误或异常的话,进行相应的处理就可以了。

但是我们会面临这么几个问题:

1)现在常常使用面向对象的编程方式,在程序空间中,我们考虑的是对象,而在查询当中,我们考虑的是SQL语句,对于对象的操作和SQL语句的产生之间如何更好的映射是一个问题

2)如果我们实现了对象操作和SQL语句之间的映射,那么性能问题将是下一个比较突出的考虑了。

3)如果我们在实际使用中,开发阶段是用的一种数据库,后来需要改为另外一种数据库的话,这种迁移工作比较麻烦,可否对其进行一定的封装,使得数据库的差异在商业逻辑编程层面不用考虑太多呢?

 

当然,如果我们不使用面向对象的编程方式,即采用面向过程的方式,直接使用Python原生的各种数据类型的话,那么SQL语句就是一个字符串,ResultSet就是一个array。也可以直接对数据进行操作。

参考 http://wiki.python.org/moin/DatabaseProgramming/ ,另外可以参考Python Database API Specification v2.0:PEP249,在其中规定了Python操作数据库对于模块的要求。

 

目前我推荐大家可以考虑使用SQLAlchemy,不过发现其在操作mysql数据库的时候在编码上有一个bug,解决办法见Python+SQLAlchemy+MySQLdb+MySQL的中文乱码及其解决办法,用起来感觉还是比较爽的,只是学习的过程可能会多些。

posted @ 2011-10-07 19:18  leether  阅读(737)  评论(0编辑  收藏  举报