如何在Python中获取PostgreSQL的数据库列表
我想在 Postgresql
服务器中获取所有数据库的列表,并把它们放到一个 Python 列表里。然后我想在另一个数据库里创建这些数据库。但是我现在还没有成功。
这是我尝试过的代码
config_read = {
'host':'psql-002',
'database':'tesdb',
'user':'pguser',
'port':'5432',
'password':'mypass'
}
class ExportPSQL():
def __init__(self):
try:
conn = psycopg2.connect(**config_read)
self.conn = conn
except:
print "Eror Connecting database"
def run(self):
# Get a list of databases with :
db_command=" psql -h localhost -U pguser tesdb -c '\l'"
db_list = os.popen(db_command)
2 个回答
2
你解决方案中缺少的部分是如何读取和解析从 psql
获取的信息:
def get_database_info(host, user):
records, _ = subprocess.Popen(['psql','-lA','-F\x02','-R\x01','-h',host,'-U',user ],stdout=subprocess.PIPE).communicate()
records = records.split('\x01')
header = records[1].split('\x02')
return [dict(zip(header,line.split('\x02'))) for line in records[2:-1]]
2
你可以通过 pg_dumpall
和 psql
这两个工具来完成所有操作,前提是你需要有超级用户的权限。
pg_dumpall -h localhost -U postgres -f pg_dumpall.sql
如果你只想复制数据库的结构(也就是表的设计),可以使用 --schema-only
这个参数。
如果你想把它恢复到另一个数据库集群中,可以使用下面的命令:
psql -f pg_dumpall.sql postgres