私はPythonにはかなり新しく、これはこの質問に適切な場所でない場合は謝罪します。モジュールを作成してデータベース(psycopg2)の使用を簡略化してください
私は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はをすべてのフィールドを選択し、それらを印刷し、接続を閉じます:一般的な使い方は次のようになります。
私が何をしたいのは、これらの関数のいくつかを、多くのスクリプトを通して何度も呼び出す必要があるため、モジュールに取り除くことです。 - 接続を開き、上記のコードの最初の2行で構成さ
- core.db_init():この例では、理想的には、私は3つの機能を含んでいるコアという名前のモジュールを有することになります。
- core.db_query(クエリ) - 目的のSQLクエリを実行し、上記のコードの3行目から構成されます。
- core.db_close() - 接続を閉じ、最後の2行で構成されます。
私は次のようにモジュールを作成しようとした:
# 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()
私もありませんよモジュールが実際に私が望むものであることを確かめてください。私は代わりにクラスを使うべきですか?繰り返しますが、私はこれのすべてに対して非常に新しいです。しかし、誰かがこれを行うより良い方法を見つけ出す手助けをすることができたら、私はとても感謝しています。
十分に書かれた質問btwは、あなたが試したことすべて、あなたが望む振る舞い、およそ実際のエラーを持っています。また、StackOverflowへようこそ、特にPythonを歓迎します。)以下の回答のいずれかがあなたの必要性を解決する場合は、質問を「回答済み」としてマークすることを忘れないでください。 – Torxed