2

我有这段代码,我正在尝试将数据行值更新为 Null 以测试它是否可以在前端使用 Selenium Webdriver 重新选择。当我针对数据库手动运行 sql 时,它工作正常,但是当我尝试为 int 列参数替换 Null 时,我得到

这是堆栈中有意义的部分

cursor.execute(query, (REASONS_CREATED[reason_created], order_id))
DataError: invalid input syntax for integer: "Null"
LINE 4:     reason_created_id = E'Null'

这是我的代码:

def update_reason_created_on_order(order_id, reason_created, environment='test'):
    '''
    Updates an order's reason created.
    '''
    sql_directory = find_path_to_sql_directory()
    with open(os.path.join(sql_directory, 'update_reason_created_on_order')) as sql:
        cursor = setup_database_cursor(environment)
        query = sql.read()
        try:
            cursor.execute(query, (REASONS_CREATED[reason_created], order_id))
        except:
            raise

这是我的 REASONS_CREATED 字典查找的 Null 条目

REASONS_CREATED = {'NULL': 'Null'}

这是我在外部文件中的 sql

UPDATE
    order
SET
    reason_created_id = %s
WHERE
    order_id = %s;
COMMIT;

我知道 psycopg2 会进行自动类型转换,并认识到这个 reason_created_id 是 int 类型。有谁知道如何将其设置为空?此外,该列可以为空。

4

1 回答 1

7

只需使用NoneSQL 的 Python 等效项NULL

注意:不是字符串"None",而是 Python 单例 None(不带引号)。

于 2013-11-06T09:11:39.597 回答