Python,如何在函数中访问psycopg2?

3 投票
1 回答
6431 浏览
提问于 2025-04-15 20:49

我想在一个文件里写一组函数,这样我就可以在需要写Python脚本的时候随时导入它们。

我试过这样做:

def get_dblink( dbstring):
"""
Return a database cnx.
"""
global psycopg2 
try
    cnx = psycopg2.connect( dbstring)
except Exception, e:
    print "Unable to connect to DB. Error [%s]" % ( e,)
    exit( )

但是我遇到了这个错误:全局名称 'psycopg2' 未定义。

在我的主文件 script.py 里,我有:

import psycopg2, psycopg2.extras
from misc_defs import * 

hostname = '192.168.10.36'
database = 'test'
username = 'test'
password = 'test'

dbstring = "host='%s' dbname='%s' user='%s' password='%s'" % ( hostname, database, username, password)

cnx = get_dblink( dbstring)

有没有人能帮我一下?

1 个回答

7

你只需要在第一个代码片段里加上 import psycopg2

如果需要的话,在第二个代码片段里再加一次也没问题(Python会确保模块只会被导入一次)。用 globals 来处理这个问题是不好的做法。

所以:在每个模块的最上面,import 所有在这个模块中用到的模块。

另外:注意 from x import *(带星号的导入)通常是不推荐的:这样会让你的命名空间变得杂乱,代码也不够清晰。

撰写回答