如何缩短mysql连接查询以避免手动键入每一行?

iq0todco  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(581)

我有一个表,可以为例如获得新行。我会添加超过100个功能,如电话号码,用户名到处理的捐赠者到这个表很快。有没有可能简化这个json对象(***),所以它不是一个不断增长的列表?如何使用pandas+python,选择等?

---        read_cur.execute("""

   select a.donor_id,
          json_object('city', a.city,
                      'name', a.name,
                      'zip', a.zip,
                      'state', a.state,
                      'address', a.address),
          b.donor_id,
          json_object('city', b.city,
                      'name', b.name,
                      'zip', b.zip,
                      'state', b.state,
                      'address', b.address)
   from (select DISTINCT l.donor_id as east, r.donor_id as west
         from blocking_map as l
         INNER JOIN blocking_map as r
         using (block_key)
         where l.donor_id < r.donor_id) ids
   INNER JOIN processed_donors a on ids.east=a.donor_id
   INNER JOIN processed_donors b on ids.west=b.donor_id

---               """)
bzzcjhmw

bzzcjhmw1#

我想你可以分两步来做。
首先,需要获取 processed_donors table。然后可以使用此结果构建查询字符串。

read_cur.execute('DESCRIBE processed_donors')
describe_result = read_cur.fetchall()
column_names = [row[0] for row in describe_result]

# column_names should be ['city', 'name', 'zip', 'state']

pairs = [f"'{col}', a.{col}" for col in column_names]
jo_a = f'json_object({", ".join(pairs)})'

# jo_a is json_object('city', a.city, 'name', a.name, 'zip', a.zip, 'state', a.state)

注意,我没有在这里运行mysql数据库,所以我无法检查这是否是构建数据库的正确方法 column_names 但我希望你能理解。您可以使用相同的过程来构建 json_object 为了 b 然后构建一个查询字符串。
请记住,通常情况下,像这样手动创建一个sql查询对于sql注入漏洞来说是一个坏主意,但是我假设这里没有用户输入,您可以控制列的名称,所以应该可以。

相关问题