質問編集履歴
3
インターネットで調べてソースコードを大幅に変更してみました。
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,28 +1,31 @@
|
|
1
|
-
|
1
|
+
少し自分で勉強してここまでたどり着いたのですが、まだエラーが消えません。
|
2
|
-
親テーブルにshijo名称が登録されていて、子テーブルにそのshijo名称に対応するレコードが存在するか確認するメソッドをsqlalchemyで作りたいと思っています。
|
3
2
|
|
4
|
-
|
3
|
+
djangoで外部キーを設定して、2つのテーブルを作っています。
|
5
4
|
|
6
|
-
|
5
|
+
結合したテーブルから情報をとったり更新したりしたいのですが、上手くいきません。
|
7
6
|
|
8
7
|
どなたかアドバイスを頂ければと思います。
|
9
8
|
|
10
|
-
|
9
|
+
エラーメッセージ
|
10
|
+
sqlalchemy.exc.NoForeignKeysError: Could not determine join condition between parent/child tables on relationship Info.kanjis - there are no foreign keys linking these tables. Ensure that referencing columns are associated with a ForeignKey or ForeignKeyConstraint, or specify a 'primaryjoin' expression.
|
11
11
|
|
12
|
-
```
|
12
|
+
```dbtables
|
13
13
|
class Info(models.Model):
|
14
|
+
__tablename__ = 'posts_info'
|
15
|
+
info_id = sqlalchemy.Column(sqlalchemy.Integer, primary_key=True, autoincrement = True)
|
14
16
|
code = models.CharField(verbose_name='code', max_length = 4)
|
15
|
-
shijo = models.CharField(verbose_name='市場', max_length = 8, null = True)
|
16
17
|
created_timestamp_at = models.DateTimeField(verbose_name='登録日時', auto_now_add=True, null = True)
|
18
|
+
kanjis = relationship("Kanji", backref = "posts_kanjis")
|
17
19
|
|
18
20
|
class Kanji(models.Model):
|
21
|
+
__tablename__ = 'posts_kanji'
|
22
|
+
kanjiid = sqlalchemy.Column(sqlalchemy.Integer, primary_key=True, autoincrement=True)
|
19
|
-
|
23
|
+
info_id = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.ForeignKey('Info.info_id',onupdate = 'CASCADE', ondelete = 'CASCADE'))
|
20
|
-
koukaiflag = models.BooleanField(verbose_name = '公開フラグ', default = 0, null = True) # 0:非公開、1:公開
|
21
24
|
created_timestamp_at = models.DateTimeField(verbose_name='登録日時', auto_now_add=True)
|
22
|
-
|
25
|
+
infos = relationship("Info", backref = 'posts_kanji', foreign_keys = [Info.info_id])
|
23
26
|
```
|
24
27
|
|
25
28
|
```sqlalchemy
|
26
|
-
|
29
|
+
code = session.query(dbtables.Kanji).join(dbtables.Info, dbtables.Info.info_id == dbtables.kanji.info_id).all
|
27
30
|
|
28
31
|
```
|
2
title
CHANGED
File without changes
|
body
CHANGED
@@ -25,5 +25,4 @@
|
|
25
25
|
```sqlalchemy
|
26
26
|
shijo = session.query(package.dbtables.Info, package.dbtables.Kanji).join(package.dbtables.Info.id==package.dbtables.Kanji.info_id).all()
|
27
27
|
|
28
|
-
```
|
28
|
+
```
|
29
|
-
本当はfilterを使ってidの特定をして変数nameにはshijo名称を返したいのですが、その入力方法もわかりませんでした。そもそも、そのような機能がないということは必要がないということでしょうか・・・・
|
1
title
CHANGED
File without changes
|
body
CHANGED
File without changes
|