【问题标题】:Insert entry into mysqldb with entry values stored as dictionary python将条目插入mysqldb,条目值存储为字典python
【发布时间】:2012-11-26 16:00:23
【问题描述】:

我已将要插入数据库的条目存储为字典,字典键与字段名称相同。有没有简单的命令可以直接做到这一点?

目前这是我使用的命令

cursor.execute('INSERT INTO jobs (title, description, country, state, city) 
VALUES (%(title)s, %(description)s, %(country)s, %(state)s, %(city)s)', (job_data.get_parsed_dictionary()))

很多时候,python 有很多优雅的库方法来处理各种各样的事情。我希望有一个这样的命令可以让它变得更简单。

【问题讨论】:

    标签: python mysql mysql-python


    【解决方案1】:

    您可以生成列名:

    data = job_data.get_parsed_dictionary()
    
    columns = ', '.join(data.keys())
    parameters = ', '.join(['%({0})s'.format(k) for k in data.keys()])
    query = 'INSERT INTO jobs ({columns}) VALUES ({parameters})'.format(columns=columns, parameters=parameters)
    
    cursor.execute(query, data)
    

    确实需要确保.get_parsed_dictionary() 结果中的键可以安全地插入到 SQL 查询中(记住您的 SQL 注入攻击向量)。如果您手边有一个可能的列名列表,我肯定会检查以过滤掉您可能在 dict 中找到的任何杂散的“额外”键。

    【讨论】:

    • get_parsed_dictionary() 中的键是从代码中获取的,但是我们如何通过更改数据中的键来进行 sql 注入?
    • @santu:字典的键被原样放入查询中。所以如果任何键是); DROP TABLE jobs;,你就有一个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-06
    • 2010-12-24
    • 1970-01-01
    • 2013-08-08
    • 1970-01-01
    • 1970-01-01
    • 2013-12-23
    相关资源
    最近更新 更多