質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

SQLAlchemy

SQLAlchemyとはPython 用のORMライブラリです。MIT Licenceのオープンソースとして提供されています。

Q&A

解決済

2回答

6930閲覧

pythonのSQLAlchemyでprimary_keyの無いテーブルを作成したい。

mito.2357

総合スコア19

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

SQLAlchemy

SQLAlchemyとはPython 用のORMライブラリです。MIT Licenceのオープンソースとして提供されています。

0グッド

0クリップ

投稿2019/06/12 04:14

編集2019/06/12 04:45

前提・実現したいこと

pythonのSQLAlchemyでprimary_keyの無いテーブルを作成したい。

発生している問題・エラーメッセージ

sqlalchemy.exc.ArgumentError: Mapper mapped class Table->table could not assemble any primary key columns for mapped table 'table'

該当のソースコード

python

1from sqlalchemy import Column, Integer, String 2# MyFile 3from database import Base 4 5class Table(Base): 6 __tablename__ == 'table' 7 8 column_1 = Column(Integer) 9 column_2 = Column(String(10))

column_1とcolumn_2はそれぞれ別のレコードでの重複します。

試したこと

id = Column(Integer, primary_key=True)

をTableクラスに書き加えると問題なく動作しました。
しかし、このカラム無しでテーブルを作成したいです。

補足情報(FW/ツールのバージョンなど)

python 3.7.2
エディタ:vs code

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

These columns do not need to be actually known to the database as primary key columns,

データベースでprimary keyと言われるところのカラムである必要はない

a table does have a so-called candidate key, which is a column or series of columns that uniquely identify a row

行を一意に識別できるカラムまたは複数のカラムがあればよい

use the primary_key=True flag on those columns

それらのカラムの全部に primary_key=True を使え

と書いてあるのでは?

class Table(Base): __tablename__ == 'table' column_1 = Column(Integer, primary_key=True) column_2 = Column(String(10), primary_key=True)

と書けばいいように読めます。

試してないですが。

ただし、column_1, column_2 の組み合わせで重複があるなら無理です。

また、その制約がデータベース上にないのなら、ふとしたはずみでおかしな動作になっても仕方がないかも。

投稿2019/06/12 07:48

quickquip

総合スコア11029

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mito.2357

2019/06/12 08:22

回答ありがとうございます! primary_keyを2つ設定すれば、複合primary_keyにすることができるのですね。試してみます。
guest

0

ベストアンサー

以前、調べたときに下記のドキュメントを見つけました。

How do I map a table that has no primary key?

The SQLAlchemy ORM, in order to map to a particular table, needs there to be at least one column denoted as a primary key column; multiple-column, i.e. composite, primary keys are of course entirely feasible as well. These columns do not need to be actually known to the database as primary key columns, though it’s a good idea that they are. It’s only necessary that the columns behave as a primary key does, e.g. as a unique and not nullable identifier for a row.

と記載されていたので、無理と判断しています。

投稿2019/06/12 04:31

編集2019/06/12 06:58
CHERRY

総合スコア25171

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mito.2357

2019/06/12 04:49

回答ありがとうございます。 どのようにすればprimaty_keyの無いテーブルを作成できるのでしょうか?
CHERRY

2019/06/12 04:56 編集

> SQLAlchemy は、特定のテーブルをマップするために、少なくとも1つの列が主キー列として指定する必要があります。 (意訳) と書かれているので、「キーなしは無理」ではないかと回答しています。
mito.2357

2019/06/12 06:04

すみません。 無理、ではない(二重否定)と読み間違えていました。 回答ありがとうございました。
CHERRY

2019/06/12 06:57

失礼しました。 たしかにわかりにくいですね。修正しておきます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問