1

Fileという新しい列タイプを定義しました。これにより、ファイル名のみをデータベースに保存できるようになります。次に、実際のファイルをファイルシステムのroot + subfolder+nameに保存します。

File(root, subfolder="", max_length=100,  **kwargs)

私が抱えている問題は、PasteDeploy構成ファイルでルートを定義したいということです。構成にアクセスできるように、実行時にこれを定義するにはどうすればよいですか?

4

2 に答える 2

4

カスタム列タイプの複雑さを回避し、ファイル パスを列として保存し、ファイル データをロードできるプロパティまたはハイブリッド プロパティを提供してみませんか?

class Data(Base):
    path = Column(String)

def myview(request):
    data = Data(path='foo')

    root_path = request.registry.settings['data_root']
    with open(os.path.join(root_path, data.path), 'rb') as fp:
        file_data = fp.read()
    # ...

明らかに、必要に応じて、その機能の一部を Data のメソッドにラップできます。

とにかく、INI 設定にアクセスする方法は次のいずれかです。

  1. settings/config オブジェクトからのアプリケーション起動中。
  2. リクエスト中に from で設定を渡すことができますrequest.registry.settings
  3. リクエスト中にアクティブなリクエストにアクセスでき、pyramid.threadlocal.get_current_request()そこから設定を取得できます。
于 2012-09-01T03:05:49.807 に答える
3

私には、これはあなたのスキーマについてもう少し考える必要があるように思えます。カスタム列タイプを実装する場合でも、そのタイプをエンジンがサポートする SQL 列タイプにマップする必要があります。フォルダーとファイル名の場合、これは最も自然に 2 つのvarchar列になります。では、クラスで両方の型のpathとの2 つのフィールドを使用しないのはなぜですか?filenameString(256)

構成可能なルートに関しては、このルートに対して相対を指定してpath、1 か所でのみ変更できるようにする必要があるように思えます。構成ファイルに保存されているものを除いて、ほとんどの構成をデータベースに持つことは、コードの匂いです。ルートを他の構成テーブルの列にすることよりも、 a を使用してルートを参照する方が望ましいと思いますForeignKey

于 2012-09-01T03:22:23.457 に答える