teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

3

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

2018/10/01 08:05

投稿

taro_yamada
taro_yamada

スコア55

title CHANGED
File without changes
body CHANGED
@@ -1,28 +1,31 @@
1
- django外部キーを設定して、親infoと子kanjiブルを作ってい
1
+ 少し自分勉強してここまでたどり着いたですが、まだエラが消えせん
2
- 親テーブルにshijo名称が登録されていて、子テーブルにそのshijo名称に対応するレコードが存在するか確認するメソッドをsqlalchemyで作りたいと思っています。
3
2
 
4
-  以下のように書いてみたのすが、そもそも、結合テーブルにwhereで条件ってselectするとったことすらネット上で見つけることができせんでした
3
+ django外部キーを設定て、2つのテーブルをっていま
5
4
 
6
-  重複ても子テーブルにもshijo属性追加ておくが答えなのしょうか?
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
- ```models.py
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
- infoid = models.ForeignKey(Info, db_column = 'info_id', on_delete=models.CASCADE)
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
- shijo = session.query(package.dbtables.Info, package.dbtables.Kanji).join(package.dbtables.Info.id==package.dbtables.Kanji.info_id).all()
29
+ code = session.query(dbtables.Kanji).join(dbtables.Info, dbtables.Info.info_id == dbtables.kanji.info_id).all
27
30
 
28
31
  ```

2

2018/10/01 08:05

投稿

taro_yamada
taro_yamada

スコア55

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

2018/09/27 03:27

投稿

taro_yamada
taro_yamada

スコア55

title CHANGED
File without changes
body CHANGED
File without changes