SQLAlchemy or psycopg2?

Homunculus Reticulli picture Homunculus Reticulli · Dec 21, 2011 · Viewed 26.3k times · Source

I am writing a quick and dirty script which requires interaction with a database (PG).

The script is a pragmatic, tactical solution to an existing problem. however, I envisage that the script will evolve over time into a more "refined" system. Given the fact that it is currently being put together very quickly (i.e. I don't have the time to pour over huge reams of documentation), I am tempted to go the quick and dirty route, using psycopg.

The advantages for psycopg2 (as I currently understand it) is that:

  1. written in C, so faster than sqlAlchemy (written in Python)?
  2. No abstraction layer over the DBAPI since works with one db and one db only (implication -> fast)
  3. (For now), I don't need an ORM, so I can directly execute my SQL statements without having to learn a new ORM syntax (i.e. lightweight)

Disadvantages:

  1. I KNOW that I will want an ORM further down the line
  2. psycopg2 is ("dated"?) - don't know how long it will remain around for

Are my perceptions of SqlAlchemy (slow/interpreted, bloated, steep learning curve) true - IS there anyway I can use sqlAlchemy in the "rough and ready" way I want to use psycopg - namely:

  1. execute SQL statements directly without having to mess about with the ORM layer, etc.

Any examples of doing this available?

Answer

Jochen Ritzel picture Jochen Ritzel · Dec 21, 2011

SQLAlchemy is a ORM, psycopg2 is a database driver. These are completely different things: SQLAlchemy generates SQL statements and psycopg2 sends SQL statements to the database. SQLAlchemy depends on psycopg2 or other database drivers to communicate with the database!

As a rather complex software layer SQLAlchemy does add some overhead but it also is a huge boost to development speed, at least once you learned the library. SQLAlchemy is a excellent library and will teach you the whole ORM concept, but if you don't want to generate SQL statements to begin with then you don't want SQLAlchemy.