問題タブ [sqlalchemy-access]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
207 参照

python - ORMを使用してSqlAlchemyで複数値フィールドからオブジェクトのリストを取得するには?

クライアントから MS Access DB ファイル (.accdb) を受け取り、declarative_base クラスでテーブルと列を記述する必要があります。テーブルコンストラクターでわかるように、列の1つに整数値があり、別のテーブル(外部キー)の別の列と「1対多」の関係があります。しかし、実際には、この外部キーには単一の整数値ではなく、セミコロンで区切られた数値の文字列が格納されています。この手法は「複数値フィールド」と呼ばれます。実際、これは連想テーブルを使用しない「多対多」の関係です。

非常に単純化されたスキーム:

declarative_base 親クラスを使用してクラスをテーブルにマップしようとしました。しかし、連想テーブルなしで「多対多」の関係を宣言する方法が見つかりません。今、私はそのようなコードを持っています。

リクエスト中 Person 私は奇妙な行動をしています:

  • vacancy_id が指定されていない場合、Person.vacancy は None として取得されます。
  • vacancy_id が単一の値 (つまり "1") として指定されている場合、Person.vacances で Vacancy クラスの単一のオブジェクトを取得します。
  • vacancy_id が複数の値 (つまり "1;2;3") として指定されている場合、Person.vacancy では None も取得されます。

もちろん、生の Person.vacancy_id をリクエストし、それをセミコロンで分割して、ID のリストを含む欠員を取得するリクエストを行うことができます。

しかし、SqlAlchemy は「複数値フィールド」を処理できるのでしょうか? そして、そのようなファイルを扱う最良の方法は何ですか?

更新 現在、複数値の列を自動的に解析するために、次の回避策を作成しました。これを Persons クラスに追加する必要があります。

Vacancy クラスには次の属性が必要です。

最後に、クラス内で使用するためのセッションを準備する必要があります。

0 投票する
0 に答える
110 参照

python - Java を使用しない mdbtools の代替手段はありますか?

そのため、Python と SqlAlchemy を使用して、Linux システム (Ubuntu 20.04 および CentOs 8) で MsAccess DB ファイルを操作しようとしています。そして、最も単純なクエリでも mdbtools ドライバーを動作させることができません。私の自宅のUbuntuでは、最新のsqlalchemy_access、pyodbc、unixodbcをインストールしました。ドライバーとして、odbc-mdbtools をインストールしました。

/etc/odbcinst.ini で正しく接続されました:

DSN URI は次のとおりです。

私のDBモデルは次のとおりです。

したがって、最初のリクエストを行うまで、すべて問題なく実行され、エラーは発生しません。ベースからすべての記事を単純に取得しようとすると、次のエラーが発生します。

ご覧のとおり、SQL ステートメントは正しく、DBeaver で問題なく実行されます。mdbtools ドライバーに問題があるようです。そのため、Linux で動作する別の MsAccess ドライバーを見つけようとしました。この古い回答によると、mdbtools (JayDeBeApi と Jython) には 2 つの選択肢しかありませんでした。また、DBeaver は UCanAccess ドライバーを使用します。これらはすべて Java VM に依存しており、内部の問題によりターゲット システムでは使用できません。Java を使用しない MsAccess の既知の代替ドライバーはありますか?

PS DB とモデルに ID 列を 1 つだけ残して raw リクエストを実行しても、同じ問題が発生します。

PPS isqlユーティリティを使用すると同じ問題が発生します。ツール mdb-sql は正常に動作します - UTF-8 文字を表示します (DB にはロシア語があります)。