选SQLAlchemy还是psycopg2?
我正在写一个简单的脚本,需要和数据库(PG)互动。
这个脚本是为了快速解决一个现有的问题,不过我想它会随着时间的推移变得更加“完善”。因为现在我需要快速搭建这个脚本(也就是说,我没有时间去仔细研究大量的文档),所以我倾向于选择一种简单粗暴的方法,使用psycopg。
根据我目前的理解,使用psycopg2的优点有:
- 它是用C语言写的,所以比用Python写的sqlAlchemy要快?
- 它没有数据库API的抽象层,因为它只支持一个数据库(这意味着速度快)
- (目前)我不需要ORM,所以我可以直接执行SQL语句,而不需要学习新的ORM语法(也就是比较轻量)
缺点:
- 我知道将来我会想要一个ORM
- psycopg2有点“过时”了,不知道它还能用多久
我对SqlAlchemy的看法(慢、解释性、臃肿、学习曲线陡峭)是否正确?有没有办法让我像使用psycopg那样“简单粗暴”地使用sqlAlchemy,也就是:
- 直接执行SQL语句,而不需要去处理ORM层等等。
有没有相关的例子可以参考?
2 个回答
要和数据库进行交流,任何人都需要一个驱动程序。如果你使用像 SQL Plus 这样的客户端来连接 Oracle 数据库,或者使用 MysqlCLI 来连接 MySQL 数据库,那么这些客户端会直接运行你的查询,并且它们是和数据库服务器一起提供的。
如果你想用外部语言,比如 Java、C、Python 或 C# 来和数据库沟通,那么你也需要一个驱动程序来连接那个数据库。比如,psycopg2 就是一个可以让 Python 运行 PostgreSQL 查询的驱动程序。
SQLAlchemy 是一个 ORM(对象关系映射),它和数据库驱动程序不一样。ORM 让你可以更灵活地编写代码,而不需要遵循特定数据库的标准。ORM 为程序员提供了数据库独立性。如果你在 ORM 中写 object.save
,它会检查这个对象关联的是哪个数据库,然后根据后端数据库生成相应的插入查询。
SQLAlchemy 是一个对象关系映射(ORM)工具,而 psycopg2 是一个数据库驱动。这两者是完全不同的东西:SQLAlchemy 生成 SQL 语句,而 psycopg2 则是把这些 SQL 语句发送到数据库里。SQLAlchemy 需要依赖 psycopg2 或其他数据库驱动来和数据库进行沟通!
作为一个相对复杂的软件层,SQLAlchemy 确实会增加一些额外的负担,但它也能大大提高开发速度,尤其是在你学会了这个库之后。SQLAlchemy 是一个非常优秀的库,它会教会你整个 ORM 的概念,但如果你一开始就不想生成 SQL 语句,那你就不需要使用 SQLAlchemy。