質問編集履歴

3

インターネットで調べてソースコードを大幅に変更してみました。

2018/10/01 08:05

投稿

taro_yamada
taro_yamada

スコア55

test CHANGED
File without changes
test CHANGED
@@ -1,14 +1,12 @@
1
- django外部キーを設定して、親infoと子kanjiのテブルを作ってい
1
+ 少し自分勉強してここまでたどり着いたのですがまだエラが消えせん
2
-
3
- 親テーブルにshijo名称が登録されていて、子テーブルにそのshijo名称に対応するレコードが存在するか確認するメソッドをsqlalchemyで作りたいと思っています。
4
2
 
5
3
 
6
4
 
7
-  以下のように書いみたですが、そもそも、結合したテーブルにwhereで条件ってselectするとったことらネット上で見つけることができませんでした
5
+ djangoで外部キーを設定し、2つのテーブルをっていす。
8
6
 
9
7
 
10
8
 
11
-  重複ても子テーブルにもshijo属性追加ておくのが答えなのでしょうか?
9
+ 結合テーブルから情報とったり更新たりしたいです、上手くいきません。
12
10
 
13
11
 
14
12
 
@@ -16,31 +14,39 @@
16
14
 
17
15
 
18
16
 
19
-  よくわかりづらい質問で大変申し訳ありませんが、よろしくお願いします。
17
+ エラーメッセージ
18
+
19
+ 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.
20
20
 
21
21
 
22
22
 
23
- ```models.py
23
+ ```dbtables
24
24
 
25
25
  class Info(models.Model):
26
26
 
27
+ __tablename__ = 'posts_info'
28
+
29
+ info_id = sqlalchemy.Column(sqlalchemy.Integer, primary_key=True, autoincrement = True)
30
+
27
31
  code = models.CharField(verbose_name='code', max_length = 4)
28
32
 
29
- shijo = models.CharField(verbose_name='市場', max_length = 8, null = True)
33
+ created_timestamp_at = models.DateTimeField(verbose_name='登録日時', auto_now_add=True, null = True)
30
34
 
31
- created_timestamp_at = models.DateTimeField(verbose_name='登録日時', auto_now_add=True, null = True)
35
+ kanjis = relationship("Kanji", backref = "posts_kanjis")
32
36
 
33
37
 
34
38
 
35
39
  class Kanji(models.Model):
36
40
 
37
- infoid = models.ForeignKey(Info, db_column = 'info_id', on_delete=models.CASCADE)
41
+ __tablename__ = 'posts_kanji'
38
42
 
39
- koukaiflag = models.BooleanField(verbose_name = '公開フラグ', default = 0, null = True) # 0:非公開、1:公開
43
+ kanjiid = sqlalchemy.Column(sqlalchemy.Integer, primary_key=True, autoincrement=True)
44
+
45
+ info_id = sqlalchemy.Column(sqlalchemy.Integer, sqlalchemy.ForeignKey('Info.info_id',onupdate = 'CASCADE', ondelete = 'CASCADE'))
40
46
 
41
47
  created_timestamp_at = models.DateTimeField(verbose_name='登録日時', auto_now_add=True)
42
48
 
43
-
49
+ infos = relationship("Info", backref = 'posts_kanji', foreign_keys = [Info.info_id])
44
50
 
45
51
  ```
46
52
 
@@ -48,7 +54,7 @@
48
54
 
49
55
  ```sqlalchemy
50
56
 
51
- shijo = session.query(package.dbtables.Info, package.dbtables.Kanji).join(package.dbtables.Info.id==package.dbtables.Kanji.info_id).all()
57
+ code = session.query(dbtables.Kanji).join(dbtables.Info, dbtables.Info.info_id == dbtables.kanji.info_id).all
52
58
 
53
59
 
54
60
 

2

2018/10/01 08:05

投稿

taro_yamada
taro_yamada

スコア55

test CHANGED
File without changes
test CHANGED
@@ -53,5 +53,3 @@
53
53
 
54
54
 
55
55
  ```
56
-
57
- 本当はfilterを使ってidの特定をして変数nameにはshijo名称を返したいのですが、その入力方法もわかりませんでした。そもそも、そのような機能がないということは必要がないということでしょうか・・・・

1

2018/09/27 03:27

投稿

taro_yamada
taro_yamada

スコア55

test CHANGED
File without changes
test CHANGED
File without changes