0

sqlite バックエンドでrelstorageを介して 1GB を超えるブロブを保存しようとしています。次の最小限の作業例

  • 以前に作成されたデータベースを blob ディレクトリと共に削除します。
  • 新しいデータベースを作成し、
  • 1GB の BLOB をデータベースに保存します。

最小限の作業例:

import os
import shutil
from ZODB import blob, config

connectionString = """
%import relstorage
<zodb main>
<relstorage>
    blob-dir blob
    keep-history false
    cache-local-mb 0
    <sqlite3>
        data-dir .
    </sqlite3>
</relstorage>
</zodb>
"""

# cleaning up
for x in os.listdir():
    if "sqlite" in x:
        os.remove(x)

shutil.rmtree("blob", True)

# creating database
db = config.databaseFromString(connectionString)

with db.transaction() as conn:
    conn.root.blob = blob.Blob()
    with conn.root.blob.open("w") as f:
        f.write(b"\0" * 1024 ** 3)

新しく作成されたオブジェクトの(db.transaction with-block のメソッドでの) コミット中に__exit__、次の最終例外とともにエラーが発生します。

sqlite3.InterfaceError: パラメータ 2 のバインド エラー - おそらくサポートされていない型です。

サイズを指定して BLOB を保存して1024 ** 2も、例外は発生しません。

共有ブロブディレクトリを使用せずに、relstorage を使用して sqlite バックエンドにブロブを保存するにはどうすればよいですか?

4

2 に答える 2