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

来源:互联网 时间:1970-01-01

关系型数据库的强项在于数据的存储和数据的处理。但是它缺乏对于商业逻辑、界面等的操作能力。通用语言(或脚本语言,如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操作数据库对于模块的要求。包括如下内容:

 

模块方法及属性:

connect(parameters…)

Constructor for creating a connection to the database.Return a Connection Object. It takes a number of parameters which are database dependent.

还有一些模块全局变量,包括:

apilevel -- 字符串常量,表示支持的DB API的水平。

threadsafety – 表示支持的线程安全的水平

paramstyle -- 字符串常量表名参数类型

Connection 对象

Cursor对象

Date Time Timestamp DateFromTicks

相关阅读:
Top