This question already has an answer here:
I need to generate a list of insert statements (for postgresql) from html files, is there a library available for python to help me properly escape and quote the names/values? in PHP i use PDO to do the escaping and quoting, is there any equivalent library for python?
Edit: I need to generate a file with sql statements for execution later
For robustness, I recommend using prepared statements to send user-entered values, no matter what language you use. :-)
The python db api 2.0 has a ".execute" method for connection objects. You can specify parameters (use a comma NOT a % sign to separate params from the query string) with this function.
Quoting parameters manually in general is a bad idea. What if there is a mistake in escaping rules? What if escape doesn't match used version of DB? What if you just forget to escape some parameter or erroneously assumed it can't contain data requiring escaping? That all may cause SQL injection vulnerability. Also, DB can have some restrictions on SQL statement length while you need to pass large data chunk for LOB column. That's why Python DB API and most databases (Python DB API module will transparently escape parameters, if database doesn't support this, as early MySQLdb did) allow passing parameters separated from statement:
SQLAlchemy provides a robust expression language for generating SQL from Python.
Like every other well-designed abstraction layer, however, the queries it generates insert data through bind variables rather than through attempting to mix the query language and the data being inserted into a single string. This approach avoids massive security vulnerabilities and is otherwise The Right Thing.
I know this is an old question, but I've often wanted what it seems the OP wants: A VERY simple library for generating basic SQL.
The below functions do just that. You give them a table name and a dictionary containing the data you want to use and they return the SQL query for the operation you need.
The key/value pairs represent field names and values in the database rows.
You use it like so. Just give it a table name and a dictionary (or use the **kwargs feature of python):
But BEWARE OF SQL INJECTION ATTACKS
Look what happens when a malicious user of your code does this:
It's easy to make your own makeshift ORM but you only get what you see -- you have to escape the input yourself :)