python是数据库语言吗_python可以作为嵌入式SQL的宿主语言吗?

貌似已经是一个两年前提出的问题了,不过我还是很乐意不请自来地给出我的回答。

结论:不能。因为没有必要。而且现有的数据库产品(不论商业还是开源)中,似乎没有一家提供了面向Python编程的嵌入式SQL支持。

所谓的没有必要具体体现在两个方面:

第一个原因: 技术发展没有理由走回头路

嵌入式SQL是一门伴随着SQL语言诞生的技术。嵌入式SQL甚至是SQL规范的一部分。在基于SQL的数据库诞生的早期,曾经很有效地帮助应用开发者解决了DAC(Data Access Code)的问题。关于嵌入式SQL技术的介绍,请参见 嵌入式SQL(中文维基)。我理解这门技术的初衷就是把SQL融入编程语言,使之变成编程语言的一部分

嵌入式SQL技术在实际运用中存在几个痛点:对于应用开发者而言。造成他们的学习负担,因为嵌入式SQL和真正意义上的SQL在概念上有很强的相似性,会导致概念混淆,从而容易引发误用。

嵌入式SQL技术会导致应用开发者所书写的代码与实际运行的代码完全不一致,从而使调试成本增大,进而影响开发效率。

# 比如,可以参见上述中文维基页中给出的代码示例。

由于嵌入式SQL只是做到了表面上让SQL成为了编程语言的一部分,但实际上与编程语言本身是泾渭分明的。因此,对于数据库厂商而言,为了支持一门编程语言的嵌入式SQL访问,需要提供两个组件:一个是面向该语言的嵌入式SQL预编译器,另一个是响应的运行时函数库。对厂商而言,开发/维护成本客观。

随着后来的技术演化,不论是哪种编程语言的DAC范式中,都形成了一个de facto的规范:用标准化的API来操作字符串形式的SQL(当然,后来又有了ORM技术。但ORM技术本质上是针对开发效率的一个改良,它并未改变这里所说的“用标准化的API来操作字符串形式的SQL”)。

第二个原因: 嵌入式SQL技术的机制本质上与Python这样的解释型语言的设计意图互相矛盾。

解释型语言的一个特征就是,它可以解释一条语句就执行一条语句,没有所谓的编译过程。但是在嵌入式SQL技术中,由于宿主语言终究无法识别形如"EXEC SQL CONNECT TO..."这样的语句,因此需要人为地加入一个预编译过程,从而能够把开发者所写的嵌入式SQL语句翻译成宿主语言能够识别的变量赋值,函数调用等。这样一来,就使得解释型语言的优势特征荡然无存。

嵌入式SQL源码中的预编译过程以及宿主语言的通常的编译过程,可见下图:

综上所述,嵌入式SQL作为一个曾经存在的技术,在如今这个技术世界中已经属于落伍的技术了。因此在一些编程语言中得不到支持也很正常,因为有更好更便利的技术可以使用了。答主如果想在Python中访问数据库的话,只需要这么做即可:依照Python中的DB-API标准接口来编写DAC代码(现在应该用DB-API 2.0版本了)

下载所用数据库产品的相应的数据驱动库(现在应该用支持DB-API 2.0的数据驱动)

注: 文中所用图片来源于 Wikimedia,作者为“小wing”,图片采用知识共享署名-相同方式共享 3.0 未本地化版本许可协议发布

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值