Dört tablo aldınız; users
, company
, company_branch
ve users_branch
. Kullanıcılar şirkete ait kişilerdir. Bir şirketin şubeleri vardır ve bir kullanıcı herhangi bir zamanda tek bir şubeye ait olabilir. Ancak, users_branch tablosu, bir daldan diğerine geçiş tarihini takip etmek için var. Örneğin. Bir kullanıcının 1 numaralı kimliğini almak için, bir SELECT company_id, company_branch_id FROM users_branch WHERE user_id = 1 ORDER BY created_at DESC LIMIT 1
çalışır.SQLAlchemy Çoklu Tablo ve Yabancı Anahtarlar Katıl
Sahip olduğum sorun, doğru bir SQLAlchemy ORM sözdizimini değil, belirli bir zamanda belirli bir şirketteki kullanıcıların listesini almak için SQL işlenemediğini ve her bir giriş için users_id, users_email_address, company_id, company_name, compancy_branch_id and company_branch_name
'u döndürürken bunu yapamıyorum. Şimdiye kadar denediğim sorgular ya hiçbir şey döndürmezler ya da users_branch içinde yinelenen değerler döndürürlerse, yalnızca her kullanıcı için en son şubeyi
Here is the link sqlfiddle örnek postgresql veritabanına istiyorum.
class Users(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
email_address = Column(String(70), nullable=False, unique=True)
class Company(Base):
__tablename__ = 'company'
id = Column(Integer, primary_key=True)
created_at = Column(DateTime, server_default=text('NOW()'), nullable=False)
created_by = Column(ForeignKey('users.id'), nullable=False)
company_name = Column(String(100), nullable=False, unique=True)
class CompanyBranch(Base):
__tablename__ = 'company_branch'
id = Column(Integer, primary_key=True)
created_at = Column(DateTime, server_default=text('NOW()'), nullable=False)
created_by = Column(ForeignKey('users.id'), nullable=False)
company_id = Column(ForeignKey('company.id'), nullable=False)
branch_name = Column(String(100), nullable=False, unique=True)
class UsersBranch(Base):
__tablename__ = 'users_branch'
id = Column(Integer, primary_key=True)
created_at = Column(DateTime, server_default=text('NOW()'), nullable=False)
created_by = Column(ForeignKey('users.id'), nullable=False)
user_id = Column(ForeignKey('users.id'), nullable=False)
company_id = Column(ForeignKey('company.id'), nullable=False)
company_branch_id = Column(ForeignKey('company_branch.id'), nullable=False)
'company_id'' users_branch' tabloya dahil edilen amaçlara sorgulamak için kasıtlı olduğunu. Kodunuzu test edip geri rapor edeceğim. Teşekkürler. – lukik
Sorgunuz beklendiği gibi çalışmadı çünkü bir 'created_at <' some_date '' veriyorsunuz. Bir sonuç, bir kullanıcının user_branch tablosunda 5 girdisi olduğu anlamına gelen beş kez dalları değiştirmişse, sorgu yalnızca en son girişi döndürmelidir. Tek bir kullanıcı için sonuç alırken çalışacağım "order_by created_at DESC limit 1" post'unda verdiğim örneğe bakın. Ancak şimdi belirli bir şirketin tüm kullanıcıları için en son girişi istiyoruz. – lukik
@lukik Belirli bir tarihten önce en son dönmez mi? – univerio