2016-07-11 4 views
0

私はPyramidを初めて使いました。私はPythonを数ヶ月使用しました。私はベンダーからの毎週のデータフィードを使用してOracleデータベースを維持するためにLinux上にPythonアプリケーションを作成しました。それを達成するために、私がしたことの1つは、cx_Oracleパッケージを使用してカスタマイズされたデータベースラッパークラスを作成することでした。 DBに履歴を保存するための具体的な要件がありました。 Oracleのすべてのアクセスは、このラッパーのメソッドを経由します。私は、Pyramidを使用して、Oracle DBへの簡単なレポート・ブラウザ・インタフェースを作成したいと考えています。私に最も大きな柔軟性を与えるために、Alchemyの代わりにOracle上のデータにアクセスするためのラッパーを使用したいと思います。 私のPyramidアプリでは、自分のラッパーをviews.py initメソッドでインポートすることを検討しましたが、それはすべてのブラウザで実行されるようです。Pythonを使用したカスタム環境でのデータベースアクセスのアプローチに関するアドバイスPyramid

私のラッパークラスを使用するレポートアプリケーションから何度も繰り返し使用できるOracleへの永続的な接続を作成する方法をお勧めしますか?私はピラミッドを少し不透明にしています。私は舞台裏で何が起こっているのかは決して確かではありませんが、私はそれを揺さぶるまで信頼関係を築きたいと思っています。自動認可/認証とログインの利点が必要です。 私が本当に探しているのは、間違ったトラックを下る前に経験豊富なPyramidユーザーからの良いアプローチです。 多くのありがとうございます。

答えて

0

SQLAlchemyは、接続プーリングなどを使用するため、間違いなく使用する必要があります。あなたのケースでは、SQLAlchemyはcx_Oracleを使用しますが、接続を維持する代わりに実際のコードを書く/集中させることに集中することができます。

基本的なSQLAlchemyを設定するには、Wiki2 tutorialのパターンに従ってください。

0

基本的に、「Pyramidで既存のAPIを使用するにはどうすればよいのですか」という質問があります。ピラミッドは、あなたが基本的には、あなたがそれをインポートし、そのメソッドを呼び出して、データを取得し、テンプレートに送信:)言うことにもかかわらず、この分野でのデータベースに依存しない、非常に透明であるので、これは非常に簡単です:

import pokemon_api as api 

@view_config(route_name='list_pokemon', renderer='pokemon_list.mako') 
def list_pokemon(request): 
    # To illustrate how to get data from the request to send to your API 
    batch_start = request.GET.get('batch_start', 0) 
    batch_end = batch_start + request.GET.get('batch_size', 0) 
    sort_order = request.GET.get('sort_by', 'name') 

    # Here we call our API - we don't actually care where it gets the data from, it's a black box 
    pokemon = api.retrieve_pokemon(from=batch_start, to=batch_end, sort=sort_order) 

    # send the data to the renderer/template 
    return { 
     'pokemon': pokemon 
    } 

@view_config(route_name='add_pokemon', request_method='POST') 
def add_pokemon(request): 
    """ 
    Add a new Pokemon 
    """ 
    name = request.POST.get('name', 0) 
    weight = request.GET.get('weight', 0) 
    hight = request.GET.get('hight', 0) 

    api.create(name=name, weight=weight, height=height) 

    # go back to the listing 
    return HTTPFound('/pokemon_list') 

とあればあなたのAPIを使用すると、もちろん

import pokemon_api as api 

def main(global_config, **settings): 
    """ This function returns a Pyramid WSGI application. 
    """ 
    config = Configurator(settings=settings) 
    ... 

    api.init("MAGIC_CONNECTION_STRING") 
    return config.make_wsgi_app() 

起動時にそれを行うことができ、いくつかの初期化を必要とする、これはあなたのAPIがすでにトランザクション、接続、プールや他の退屈なもの:)もちろんのこと

ワン最後のポイントを扱う前提として - Pythonでは一般的にはものをインポートしません内部メソッドでは、モジュールレベルのスコープでファイルの先頭にインポートします。そのルールには例外がありますが、なぜこの場合に必要なのかわかりません。また、モジュールのインポートには副作用(「views.py __init__メソッドでラッパーをインポートする」が問題を引き起こしているように思われる)がないようにする必要があります。

+0

ありがとうSergey。以下は、rdラッパークラスの実際のコードです。私はいくつかのPythonを学ぶための練習として書きましたので、たくさんの改訂が見られます。 – Niall

+0

申し訳ありません、ファイルは次のとおりです: - https://www.dropbox.com/s/b7848m1r49sk4z8/beneOracleWrapper.py?dl=0 – Niall

+0

私はあなたの解決策がまだ有効であると推測していますか? – Niall

関連する問題