URL: https://www.peterbe.com/plog/rundotsql/rundotsql.py

In my Zope usage I use a lot of SQL stored on the filesystem. These files contain DTML syntax and parameters like ZSQL Method objects inside the ZODB. Sometimes, to test the SQL code I have in these files I want to run it on the command line. To be able to do that I've written this little Python script which is placed in my ~/bin directory in Linux. It only works with PostgreSQL at the moment but people who like the idea and prefer Oracle or MySQL could probably find where to make their changes. (The psql -f command is the ticket)

Example foo.sql:


<params>id=1
name</params>
SELECT *
FROM sometable
WHERE id = <dtml-sqlvar id type="int">
AND   name = <dtml-sqlvar name type="string">

Which is run like this:


peterbe@trillian:~ $ rundotsql.py -U peterbe testdb foo.sql

If you run the command:


peterbe@trillian:~ $ rundotsql.py -h

then you'll hopefully understand how it works. If you have specified the database connection string once you won't have to do it again unless you're changing database. If you want to test your SQL but without committing anything for real to the database you can run it like this:


peterbe@trillian:~ $ rundotsql.py --test delete_everything.sql

It will wrap the SQL in a BEGIN and ROLLBACK command.

Have a play with it if you might find it useful. Please let me know of any problems or ideas you have. The DTML "rendering" is dead-stupid. It's NOT using the real Zope DTML rendering engine; rather, it's using some simple regular expressions.

Comments

Tony

mysql already does this:
mysql -u uname dbname < file.sql

Peter Bengtsson

What if the file has DTML in it? With conditionals and parameters?
I think it's the same syntax for postgres but again it does have the same amount of magic :)

Your email will never ever be published.

Previous:
Valuble site: Commonly Confused Characters December 28, 2004 Web development
Next:
My favorite CSS Zen Garden design January 10, 2005 Web development
Related by category:
How I run standalone Python in 2025 January 14, 2025 Python
get in JavaScript is the same as property in Python February 13, 2025 Python
How to resolve a git conflict in poetry.lock February 7, 2020 Python
Best practice with retries with requests April 19, 2017 Python
Related by keyword:
Adding client-to-server sync to PissueTracker March 20, 2025 React, JavaScript, Bun
Connecting with psycopg2 without a username and password February 24, 2011 Python
UPPER vs. ILIKE April 19, 2010 Web development
How I performance test PostgreSQL locally on macOS December 10, 2018 Web development, PostgreSQL, macOS