sql >> データベース >  >> RDS >> PostgreSQL

モジュールを作成してデータベース(psycopg2)の使用を簡素化する

    あなたの主な問題は、各変数があなたがそれを書いた関数に制限されているということです。
    特にそのように宣言されていない限り:

    def db_init():
        global conn
        conn = psycopg2....
    

    より良いアプローチは、これをクラスに変換することです。基本的な例は次のとおりです。

    import psycopg2
    
    class MyDatabase():
        def __init__(self, db="mydb", user="postgres"):
            self.conn = psycopg2.connect(database=db, user=user)
            self.cur = self.conn.cursor()
    
        def query(self, query):
            self.cur.execute(query)
    
        def close(self):
            self.cur.close()
            self.conn.close()
    
    db = MyDatabase()
    db.query("SELECT * FROM table;")
    db.close()
    

    さて、SELECT cur.execute()を使用しているため、クエリはあまり機能しません 。
    しかし、コードをあなたが書いたものと同じに保つために意図的にこれを維持しました。値を返すことが期待されるクエリを呼び出す場合など、値を返すためにそれを交換する必要があります。

    関数に焦点を当てたアプローチでは、変数がその関数のローカルスコープに存在し、他の関数では通常それらにアクセスできないという「名前空間」の問題が発生します。

    代わりに、クラススコープの変数はそれ自体の変数にアクセスでき、すぐに使用できるように制限されていません。

    グローバル変数を作成し、関数でグローバルとして宣言することもできますが、コメントで述べたように:



    1. Phoenixを使用したEctoクエリでカテゴリ別に最大日付グループのIDを選択するにはどうすればよいですか?

    2. SELECT ... WHERE id =aは、値が0の場合に結果を返すのはなぜですか

    3. jqueryhtmlおよびphpを使用してデータベースにタグを挿入する方法

    4. 従来のASPMySQLの間違った認証方法