2016-08-18 3 views
0

私はOOPを少し教えようとしています。私が作成した既存のpostgresqlデータベースに接続するクラスを作成しようとしています。oalを使用してpostgresqlに接続しようとしているSQLalchemy

私はクラスの形式でこれを複製する方法を把握しようとしているので、OOPする新たなんだ述べたように、私は、しかし、このコード

engine = create_engine('postgresql://[email protected]/dbname') 
conn = engine.connect() 
result = conn.execute(sql) 
for row in result: 
    print(row) 

を使用する場合、私はSQLAlchemyのを使用してデータベースの罰金に接続することができます。次のコードは、エラーAttributeError: 'NoneType' object has no attribute 'execute'を示しています。私は多くのエラーやベストプラクティスがあると思っています。私はいくつかのガイダンスが欠けているので、ある種の指針は大いに感謝されます。

from sqlalchemy import create_engine 

class dbConnect(object): 
    db_connection = None 
    db_cur = None 

    def __init__(self): 
     self.db_connection = create_engine('postgresql://[email protected]/dbname') 
     self.cur = self.db_connection.connect() 

    def query(self, query): 
     test = self.db_cur.execute(query) 
     return test 

sql = """ 
SELECT 
    id 
FROM 
    t 
WHERE 
    id = 14070 
""" 

x = dbConnect() 
result = x.query(sql) 
for row in result: 
    print(row) 
+1

さて、あなたは 'db_cur = None'を割り当てましたが、その後はそれに対して '.execute(query)'を呼び出すことができます。 – univerio

+0

それは簡単でした。あなたは正しいと今すぐ動作します。ありがとう。このタイプのものでベストプラクティスがあるかどうかを知りたいと思うでしょう。 – hselbie

+0

このタイプのもののベストプラクティスはパターンと呼ばれます。そのため、ここでは "factory"または "singleton"を調べることができます。がんばろう! –

答えて

0

私は常にPajladaのDatabase Manager Singleton Classを使用します。立ち往生するのはかなり簡単です。あなたはあなたのURLでクラスを初期化するだけです。

DBManager.init('psqlurlhere') 

、その後、あなたがそれを行うための複数の方法があるセッションを作成したいとき:

あなたが特定の事をした後、終了しますセッションを作成します

with DBManager.create_session_scope() as session: 
    session.add(Model) 
    session.commit() 

セッションを作成しますが、その

session = DBManager.create_session(expire_on_commit=False) 
session.add(Model) 
session.comit() 
関連する問題