I'm trying to create a postgres DB using a python script. Some research showed that using the psycopg2 module might be a way to do it. I installed it and made the required changes in the pg_hba.conf
file. I used the following code to create the DB:
#!/usr/bin/python # -*- coding: utf-8 -*- from psycopg2 import connect import sys from psycopg2.extensions import ISOLATION_LEVEL_AUTOCOMMIT con = None con = connect(user='****', host = 'localhost', password='****') dbname = "voylla_production1710" con.set_isolation_level(ISOLATION_LEVEL_AUTOCOMMIT) cur = con.cursor() cur.execute('CREATE DATABASE ' + dbname) cur.close() con.close()
I tried replacing con = connect(user='nishant', host = 'localhost', password='everything')
with con = connect(user='nishant', password='everything')
But I'm getting the following Error:
con = connect(user='nishant', host = 'localhost', password='everything') File "/usr/lib/python2.7/dist-packages/psycopg2/__init__.py", line 179, in connect connection_factory=connection_factory, async=async) psycopg2.OperationalError: FATAL: database "nishant" does not exist
Could someone please tell me the right way of doing it. Thanks
Creating a database using python You can create a cursor object using the cursor() method of the Connection class. The execute() method of this class accepts a PostgreSQL query as a parameter and executes it. Therefore, to create a database in PostgreSQL, execute the CREATE DATABASE query using this method.
From PostgreSQL wiki. Psycopg2 is a mature driver for interacting with PostgreSQL from the Python scripting language. It is written in C and provides a means to perform the full range of SQL operations against PostgreSQL databases.
Psycopg2 is a DB API 2.0 compliant PostgreSQL driver that is actively developed. It is designed for multi-threaded applications and manages its own connection pool.
PostgreSQL's client connects to a database named after the user by default. This is why you get the error FATAL: database "nishant" does not exist
.
You can connect to the default system database postgres
and then issue your query to create the new database.
con = connect(dbname='postgres', user='nishant', host='localhost', password='everything')
Make sure your nishant
user has permission to create databases.
Edit: By the way, check out the ~/.pgpass file to store password securely and not in the source code (http://www.postgresql.org/docs/9.2/static/libpq-pgpass.html). libpq, the postgresql client librairy, check for this file to get proper login information. It's very very handy.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With