私はテキストファイルで私に提供された従来のデータセットを使用しています。Sqlalchemy - このクエリを実行する方法とこれは正しいですか?
class Business(Base):
__tablename__ = 'businesses'
id = Column(Integer, primary_key=True)
name = Column(String)
county_fips = Column(String)
state_code = Column(String(2), ForeignKey('states.code'))
state_fips = Column(String(2), ForeignKey('states.state_fips'))
city = Column(String)
[... a bunch of other columns ...]
私は異なる専門性のカテゴリを持つ2つのテーブルを持っています。
class Category(Base):
__tablename__ = 'categories'
id = Column(Integer, primary_key=True)
name = Column(String)
class SubCategory(Base):
__tablename__ = 'sub_categories'
id = Column(Integer, primary_key=True)
name = Column(String)
カテゴリとサブカテゴリIDがビジネスIDに一致する巨大なテキストファイルがあります。地理側
class BusinessHeadings(Base):
__tablename__ = 'business_headings'
id = Column(ForeignKey('businesses.id'), primary_key=True)
cat_id = Column(ForeignKey('categories.id')
subcat_id = Column(ForeignKey('sub_categories.id')
[... another integer column ...]
、私は市、USCounty、および国家のためのモデルを持っている:私はこれのようにマッピングされてきました。
市は、2文字コード(カリフォルニア州の場合はCAなど)を使用して州に外部キーを持ちます。郡への唯一の言及は名前によるものであり、衝突があるので固有の制約を持つことはできません。 USCountyには、county_FIPS、state_FIPS、state_code(2文字)などの主キーがあります。 state_FIPSとstate_codeは両方とも、状態オブジェクトを指すForeignKeysです。
MY TASK:
が特定の状態にある特定の郡内の特定の都市における特定のカテゴリに属するすべての企業を選択します。
米国の都市、州、および郡の全リストを使用している場合は、同じ州に同じ名前の郡、異なる州に同じ名前の郡などがあります。私は何の問題もなく、特定の市、郡、州内のすべての事業を引くことができますこれにより
specific_county = session.query(USCounty).filter_by(name=city.county).\
filter_by(state_code=city.state_code).first()
:
は今、私が持つ特定の郡と状態を引っ張ります。これで、カテゴリまたはサブカテゴリに一致するものだけを取り出すことができます。クエリが正しく動作しているか、テーブルを正しく定義していない(特にBusinessHeadings)
おかげで、これは働いていました。 はい、データベースの設定が正しくありませんでした。これが機能していますが、実際にはそれが多かったので、多対多の関係に変更されました。多くのカテゴリは多くのビジネスに属し、その逆もあります。 '.filter(Business.categories.any(name = cat_name)')をフィルタリングするだけです。 多対多関連テーブルのように見える場合は、次のようになります:) – brandonjschwartz