当用户想要添加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()
这将返回我的表对象,我可以检查是否有一个特定的端口,但现在我创建了继承自sqlalchemy.Table
的表我没有查询功能可用。
如何查询和比较特定IP是否具有映射到现有urlmap的特定端口地址(未知)?
答案 0 :(得分:0)
像往常一样想出来: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))