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

本文探讨了关系型数据库与通用语言在实际应用中的互操作性问题,包括面向对象编程与SQL语句映射、性能考量、数据库迁移等挑战,并推荐了SQLAlchemy作为解决方案之一。

关系型数据库的强项在于数据的存储和数据的处理。但是它缺乏对于商业逻辑、界面等的操作能力。通用语言(或脚本语言,如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的中文乱码及其解决办法,用起来感觉还是比较爽的,只是学习的过程可能会多些。

转载于:https://www.cnblogs.com/leether/archive/2011/10/07/2200717.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值