【问题标题】:how to get table object and query specific fields in sqlalchemy?如何获取表对象并查询 sqlalchemy 中的特定字段?
【发布时间】:2018-02-27 14:13:23
【问题描述】:

当用户想要添加 IP 地址和端口以获取引用他添加的特定 ip:port 的 url 映射时,我创建了一个表。该表是根据他的电子邮件地址创建的。

def create_user_table(table_name):
    engine = get_sql_engine()
    metadata = MetaData(engine)
    user_table = Table(table_name, metadata,
        Column("userip_id", db.Integer, primary_key=True, autoincrement=True),
        Column("date_created", db.DateTime, default=db.func.current_timestamp()),
        Column("date_modified", db.DateTime, default=db.func.current_timestamp(),
                              onupdate=db.func.current_timestamp()),
        Column("ipaddress", CIDR, nullable=False),
        Column("urlmap", db.String(10), nullable=False, unique=True),
        Column("port", db.Integer, index=True),
        Column("device", db.String(10)),
        Column("path", db.String(30)),
        Column("service", db.String(10)),
        Column("count_updates", db.Integer, default=0, nullable=False),
        )
    user_table.create(engine)
    return user_table

我没有使 ipaddress 和端口地址唯一,因为同一个用户可以有不同的端口但相同的 ip 和不同的 ip 但相同的端口地址(考虑到用户可以更新,我选择了后者)

如果我在 db 继承形式 db.Model 中创建一个表,我可以像这样查询 cls.query.filter(ipaddress=ipaddress).first() 这将返回该表对象,我可以检查该 Ip 是否具有特定端口,但现在我已经创建了从 sqlalchemy.Table 继承的表,我没有可用的查询功能。

如果特定的ip有特定的端口地址映射到现有的urlmap(未知),如何查询和比较?

【问题讨论】:

    标签: sqlalchemy flask-sqlalchemy


    【解决方案1】:

    像往常一样想办法:p

    # if same ip exists external port address should not exist in mapped in db.
    query_table = helpers.get_query_result(user_table_name, "ipaddress", data['ip']).fetchall()
    ports_mapped_to_ip_in_db = [item[5] for item in query_table]
    if int(data['port']) in ports_mapped_to_ip_in_db:
        return jsonify({"status": "{}:{} is already registered.".format(data["ip"], data["port"])})
    

    helpers 模块中的get_query_result 是:

    def get_query_result(table_name, field_name=None, value=None):
        """ execute query and provide result
        """
        engine = get_sql_engine()
        if all([field_name, value]):
            return engine.execute("SELECT * FROM {} WHERE {}='{}'".format(table_name, field_name, value))
        else:
            return engine.execute("SELECT * FROM {}".format(table_name))
    

    【讨论】:

      猜你喜欢
      • 2017-09-30
      • 2021-02-18
      • 2022-01-25
      • 2022-06-30
      • 2017-09-16
      • 1970-01-01
      • 2018-08-19
      • 2019-08-12
      • 1970-01-01
      相关资源
      最近更新 更多