【发布时间】:2016-09-26 01:41:40
【问题描述】:
让我先说我对 Python 还很陌生,如果这里不适合回答这个问题,我深表歉意。
我正在使用 psycopg2 模块来操作 PostgreSQL 数据库。一般用法如下所示:
# Example 1
import psycopg2
conn = psycopg2.connect(database="mydb", user="postgres")
cur = conn.cursor()
cur.execute ("SELECT * FROM mytable;")
rows = cur.fetchall()
for i, row in enumerate(rows):
print "Row", i, "value = ", row
cur.close()
conn.close()
这将打开到 mydb 数据库的连接,从表 mytable 中选择所有字段并打印它们,然后关闭连接。
我想做的是将其中一些函数分解到一个模块中,因为我需要在许多脚本中一遍又一遍地调用它们。对于这个例子,理想情况下我会有一个名为 core 的模块,它包含三个功能:
- core.db_init() - 打开连接,由上面的前两行代码组成。
- core.db_query(query) - 执行所需的 SQL 查询,由上述代码的第三行组成。
- core.db_close() - 关闭连接,由最后两行组成。
我尝试过如下创建模块:
# Module core.py
import psycopg2
def db_init():
conn = psycopg2.connect(database="mydb", user="postgres")
cur = conn.cursor()
def db_query(query):
cur.execute(query)
def db_close():
cur.close()
conn.close()
但是当我尝试使用此模块重新创建示例 1 时出现命名空间错误:
# Example 2
import core
core.db_init()
core.db_query("SELECT * FROM mytable;")
rows = cur.fetchall()
for i, row in enumerate(rows):
print "Row", i, "value = ", row
core.db_close()
我什至不确定模块是否真的是我想要的。我应该改用一个类吗?再说一次,我对这一切都很陌生。但如果有人能帮助我找出更好的方法来做到这一点,我将不胜感激。
【问题讨论】:
-
写得很好的问题顺便说一句,有你尝试过的一切,你想要的行为是什么,大致是一个实际的错误。也欢迎使用 StackOverflow,特别欢迎使用 Python :) 如果下面给出的任何答案都解决了您的需求,请不要忘记将问题标记为“已回答”,这样它就不会出现在一堆未回答的问题中。
标签: python sql postgresql module psycopg2