【问题标题】:MySQL from Python using MySQLdb使用 MySQLdb 的 Python 中的 MySQL
【发布时间】:2023-03-13 05:25:01
【问题描述】:

我正在尝试使用 MySQLdb python 包向 MySQL 数据库添加值。我的某些列不能为空,我正在努力寻找一种方法来检查必须存在哪些列值,然后再尝试将数据添加到我的表中。 目前我必须解析一个文件,提取一些键、值对,找出这些应该添加到哪些表中,然后使用以下方法添加它们:

cursor.execute("""INSERT INTO %s (%s) VALUES (\"%s\")""" %(tbl, cols, vals)

我可以确保以正确的顺序添加列,并且可以获取自动增量 ID 以链接不同的表。我想要做的是对于每个表,检查它是否包含一个不可为空的列,然后,如有必要,相应地修改输入值,然后再尝试将值添加到表中。关于如何做到这一点的任何建议/更好的想法?

【问题讨论】:

    标签: python mysql python-2.7 mysql-python


    【解决方案1】:

    您可以在 MySQL 中测试 INFORMATION_SCHEMA.COLUMNS 表以确定列是否接受 NULL 值。

    SELECT `IS_NULLABLE`
    FROM INFORMATION_SCHEMA.`COLUMNS`
    WHERE `TABLE_SCHEMA` = 'SchemaName'
    AND `TABLE_NAME` = tbl
    AND `COLUMN_NAME` = col
    ; # returns YES/NO
    

    您应该改进 cursor.execute(stmt, [params]) 语法的语法以传递参数,而不是在文本 sql 中硬编码。这将更加可靠:

    sql = "INSERT INTO %s (%s)" % (tbl, col)
    sql += " VALUES(%s)"
    cursor.execute(sql, [val])
    connection.commit()
    

    MySQL Docs for cursor.execute

    【讨论】:

    • 谢谢,我已经在 python 中执行了 MySQL 命令,然后使用返回值 (YES/NO) 来确定是否需要添加更多列/值。也感谢您的语法建议。
    猜你喜欢
    • 2018-05-11
    • 1970-01-01
    • 2014-08-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-15
    • 2016-04-04
    • 1970-01-01
    相关资源
    最近更新 更多