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

How to shorten mysql join query to avoid manual typing of each row?

我有一个 table 可以获取新行,例如。我会添加 100 多个功能,例如 phone_number,用户名到 processed_donors 到 table 非常 soon.IS 可以简化这个 json_object(*** *) 所以它不是一个不断增长的列表?使用 pandas+python, select * etc?

的一些方法
---        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

---               """)

我想你可以分两步完成。

首先,您需要获取 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 的正确方法,但我希望你明白了。您可以使用相同的过程为 b 构建 json_object,然后构建查询字符串。

请记住,通常情况下,像这样手动创建 SQL 查询对 SQL 注入漏洞来说不是一个好主意,但我认为这里不涉及用户输入,您可以控制列的名称,所以应该没问题。