簡體   English   中英

具有復雜匹配邏輯的sqlalchemy外鍵。

[英]sqlalchemy foreign key with complex match logic.

我正在嘗試使用sqlalchemy建立數據庫。

我有兩個表: flowkrbr

from __future__ import print_function
import numpy as np
import pandas as pd
import sqlalchemy
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, String
import sqlalchemy_utils
from sqlalchemy_utils.types.ip_address import IPAddressType


Base = declarative_base()

## Define the tables schema

class Flow(Base):
    __tablename__ = 'flow'

    Id  = Column(Integer, primary_key=True)
    First = Column(Integer, index=True)
    Protocol  = Column(String(10))
    Src = Column(IPAddressType, index=True)
    SrcPort = Column(Integer)
    Dst = Column(IPAddressType, index=True)
    DstPort = Column(Integer)
    GroupId = Column(Integer)
    Port = Column(String(10))
    VPort = Column(Integer)
    IpTos = Column(String)
    VlanId = Column(String)
    VlanPri = Column(String)
    Application = Column(String(100))
    Packets = Column(Integer)
    Messages = Column(Integer)
    Bytes = Column(Integer)
    Last = Column(Integer)
    #LearnedIPs alertable 
    #LearnedIPs learned-ip
    #   u'LearnedIPs new-ips', u'LearnedIPs subnet-name',
    #   u'LearnedIPs timestamp-sec', u'LearnedIPs total-ips', u'SrcSubnet',
    #   u'DstSubnet'],
    # 'MPLS Exp'


class Krbr(Base):
    __tablename__ = 'krbr'
    Id  = Column(Integer, primary_key=True)
    Src = Column(IPAddressType, index=True)
    SrcPort = Column(Integer)
    Dst = Column(IPAddressType, index=True)
    DstPort = Column(Integer)
    TimeNs = Column(Integer)

flow某些行相關聯的是krbr一個或多個行。

如果滿足以下條件,則krbr中的行與flow的行相關聯:

1)它們具有相同的Src, Dst, SrcPort, DstPort

2)他們及時關閉。 np.abs(Flow.first - Krbr.TimeNs/1000000000) < threshold

我想知道在兩個表之間創建鏈接的正確方法是什么。 即給定一個表的行,我希望能夠獲取另一表的行。

我對sqlalchemy不太了解。 我想應該定義一個外鍵,但是我不知道如何執行這種復雜的關系。

這是“處理多個聯接路徑”的示例:

from sqlalchemy import Integer, ForeignKey, String, Column
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship

Base = declarative_base()

class Customer(Base):
    __tablename__ = 'customer'
    id = Column(Integer, primary_key=True)
    name = Column(String)

    billing_address_id = Column(Integer, ForeignKey("address.id"))
    shipping_address_id = Column(Integer, ForeignKey("address.id"))

    billing_address = relationship("Address")
    shipping_address = relationship("Address")

class Address(Base):
    __tablename__ = 'address'
    id = Column(Integer, primary_key=True)
    street = Column(String)
    city = Column(String)
    state = Column(String)
    zip = Column(String)

有關“處理多個聯接路徑”的更多信息,請參見SQLAlchemy 0.9文檔。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM