1

我想在 Cassandra 查询中使用一个变量作为我的表的名称。

可以这样做:

self.session.execute(
            """
            INSERT INTO table_name (col1, col2)
            VALUES (%s, %s)
            """,
            ("1", "2")
        )

但是,例如,我想做这样的事情

self.session.execute(
            """
            INSERT INTO %s (col1, col2)
            VALUES (%s, %s)
            """,
            ("table_name","1", "2")
        )

好像走错路了...

当然我想保持关于sql注入的安全

谢谢

4

1 回答 1

1

您需要使用准备好的查询而不是该方法 - 当您使用%s占位符时,查询未准备好,Cassandra 每次解析查询都会产生额外的开销。如果您使用类似的东西,最好避免这种情况 - 定义一个将保存准备好的查询的映射,并在代码中使用准备不在此缓存中的查询的函数。代码将如下所示(未经测试):

queries = {}
def get_query(session, stmt):
    global queries
    query = queries.get(stmt)
    if query is None:
       query = session.prepare(stmt)
       queries[stmt]=query
    return query

然后在代码中:

 stmt = "select  * from %s.%s where id =?".format(ks, table)
 query = get_query(stmt)
 session.execute(query, [params])

有关更多详细信息,请参阅文档

于 2019-01-21T22:00:08.490 回答