使用psycopg2在Python中动态更改PostgreSQL数据库

10

有人能告诉我如何在使用以下代码的同时动态更改我刚创建的数据库吗? 我认为在执行此代码期间,我将在默认的PostgreSQL数据库(即模板数据库)中,而在创建新数据库后,我想在运行时更改我的数据库以进行进一步处理...

    from psycopg2 import connect
    from psycopg2.extensions import ISOLATION_LEVEL_AUTOCOMMIT

    dbname = 'db_name'
    con = connect(user ='postgres', host = 'localhost', password = '*****')
    con.set_isolation_level(ISOLATION_LEVEL_AUTOCOMMIT)
    cur = con.cursor()
    cur.execute('CREATE DATABASE ' + dbname)
    cur.close()
    con.close()

2
在PostgreSQL中,如果您不建立新的连接,就无法更改数据库,因此Michal是完全正确的。 - Craig Ringer
1个回答

17

您可以使用database=dbname参数重新连接。注意使用SELECT current_database()来显示我们正在使用的数据库,以及SELECT * FROM pg_database来显示可用的数据库:

from psycopg2 import connect
from psycopg2.extensions import ISOLATION_LEVEL_AUTOCOMMIT

def show_query(title, qry):
    print('%s' % (title))
    cur.execute(qry)
    for row in cur.fetchall():
        print(row)
    print('')

dbname = 'db_name'
print('connecting to default database ...')
con = connect(user ='postgres', host = 'localhost', password = '*****', port=5492)
con.set_isolation_level(ISOLATION_LEVEL_AUTOCOMMIT)
cur = con.cursor()
show_query('current database', 'SELECT current_database()')
cur.execute('CREATE DATABASE ' + dbname)
show_query('available databases', 'SELECT * FROM pg_database')
cur.close()
con.close()

print('connecting to %s ...' % (dbname))
con = connect(user ='postgres', database=dbname, host = 'localhost', password = '*****', port=5492)
cur = con.cursor()
show_query('current database', 'SELECT current_database()')
cur.close()
con.close()

有没有办法在不关闭和重新连接的情况下更新连接的数据库绑定? - Bernd Wechner
有没有办法在不关闭和重新连接的情况下更新连接的数据库绑定? - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接