SQLAlchemyを使用してSQLite DBから取得した情報を表示するObjectListViewがあります。 (loans
をSQLAlchemyで結合テーブルを照会し、ObjectListViewに表示する
class Card(DeclarativeBase):
"""
Card model
"""
__tablename__ = "cards"
id = Column(Unicode(50), primary_key=True)
active = Column(Boolean)
私はテーブルを結合しようとしています:
class Loan(DeclarativeBase):
"""
Loan model
"""
__tablename__ = "loans"
id = Column(Integer, primary_key=True)
card_id = Column(Unicode, ForeignKey("cards.id"))
person_id = Column(Unicode, ForeignKey("people.id"))
date_issued = Column(Date)
date_due = Column(Date)
date_returned = Column(Date)
issue_reason = Column(Unicode(50))
person = relation("Person", backref="loans", cascade_backrefs=False)
card = relation("Card", backref="loans", cascade_backrefs=False)
パーソン:
class Person(DeclarativeBase):
"""
Person model
"""
__tablename__ = "people"
id = Column(Unicode(50), primary_key=True)
fname = Column(Unicode(50))
sname = Column(Unicode(50))
とカード
def setupOLV(self):
self.loanResultsOlv.SetEmptyListMsg("No Loan Records Found")
self.loanResultsOlv.SetColumns([
ColumnDefn("Date Issued", "left", 100, "date_issued",
stringConverter="%d-%m-%y"),
ColumnDefn("Card Number", "left", 100, "card_id"),
ColumnDefn("Student Number", "left", 100, "person_id"),
ColumnDefn("Forename", "left", 150, "person_fname"),
ColumnDefn("Surname", "left", 150, "person_sname"),
ColumnDefn("Reason", "left", 150, "issue_reason"),
ColumnDefn("Date Due", "left", 100, "date_due",
stringConverter="%d-%m-%y"),
ColumnDefn("Date Returned", "left", 100, "date_returned",
stringConverter="%d-%m-%y")
])
私はまた、3つのモデル、ローンを持っていますおよびpeople
)を使用して、ObjectListView内の情報を取得して表示します。ここに私の質問方法は次のとおりです。
def getQueriedRecords(session, filterChoice, keyword):
"""
Searches the database based on the filter chosen and the keyword
given by the user
"""
qry = session.query(Loan)
if filterChoice == "person":
result = qry.join(Person).filter(Loan.person_id=='%s' % keyword).all()
elif filterChoice == "card":
result = qry.join(Person).filter(Loan.card_id=='%s' % keyword).all()
return result
私はloans
テーブルが、forenameと姓に保存されているすべてのフィールドを取得して表示することができます(people
テーブルから引き出されperson.id
に参加する必要があります)私のObjectListViewに空白です。私はSQLの出力を持っているので、クエリを見ることができ、people
テーブルからは全く選択されていません。
は、どのように私はこの情報を取得し、表示するために私のクエリ/ ObjectListViewを変更することができます。 ?
UPDATE:私はhere実行可能であるサンプルスクリプトを作成しました。
は、その後、あなたのSQLAlchemyのはおそらく正しいではありません参加します。クエリがそのデータへのアクセス権を与えていない場合、OLVウィジェットはそのデータを表示できません。 –
@Mike絶対に、私はそれを理解しており、質問には間違いがあると確信しています。私は、SQLAlchemyのチュートリアルに従って結合をクエリしてきましたが、このような事例は見当たりません。私は自分のコードが正しいかどうかわからないので(OLVの問題が解決したら)、OLVだけを言います。 – johnharris85
SAコードは私にとっては正しいですが、間違っているものについては盲目にしなければなりません。ごめんなさい。 –