zoukankan      html  css  js  c++  java
  • insert NULL into mysql

    https://stackoverflow.com/questions/36898130/python-how-to-insert-null-mysql-values

    You are inserting the string 'NULL', not the NULL value. If these values are coming from a Python structure, you need to use something else to map to the NULL value in SQL.

    You could use None for this, and only quote other values:

    def sqlquote(value):
        """Naive SQL quoting
    
        All values except NULL are returned as SQL strings in single quotes,
        with any embedded quotes doubled.
    
        """
        if value is None:
             return 'NULL'
        return "'{}'".format(str(value).replace("'", "''"))
    
    sql = "INSERT INTO test VALUES ({column1}, {column2}, {column3})".format(
        **{k: sqlquote(v) for k, v in d.items()})

    Note that because you have to handle None differently, you also have to handle proper SQL quoting! If any of your values directly or indirectly come from user-supplied data, you'd be open for SQL injection attacks otherwise.

    The above sqlquote() function should suffice for SQLite strings, which follow standard SQL quoting rules. Different databases have different rules for this, so tripple check your documentation.

    Personally, I'd use the SQLAlchemy library to generate SQL and have it handle quoting for you. You can configure it to produce SQL for different database engines.

    插入空的datetime类型:

    sql = "INSERT INTO test_data_table (`data`, char_test, datetime_test) VALUES (%s, %s, %s)" % ('NULL', 'NULL', "'2017-09-01'")
    sql = "INSERT INTO test_data_table (`data`, char_test, datetime_test) VALUES (%s, %s, %s)" % ('NULL', 'NULL', 'NULL')
    注意两者之间的不同。

    简而言之,python遇到None,需要在数据库插入'NULL'需要有一个转化过程,将None转为NULL,并视情况加单双引号,不加''在%s.

    数字插入空值

    INSERT INTO company (company_id,  name, employee_nums) values (%s, %s, %s) on duplicate key update company_id = values(company_id), name=values(name), employee_nums=values(employee_nums);
    args = (1, "test_name", None)  # None will be convert to NULL
    conn._cur.execute(sql, arg)

    # 再次更新,%s全部不加引号,在传值之前处理完毕

    INSERT INTO company (company_id,  name, employee_nums, registered_date) 

    values (%s, %s, %s, %s)

    on duplicate key update company_id = values(company_id), name=values(name), employee_nums=values(employee_nums),

    registered_date=values(registered_date); % (company_id, name, employee_name, "'{}'".format(registered_date) if registred_date else "NULL"
  • 相关阅读:
    python,抓取百度搜索结果
    python关键字 with
    python 字符串处理
    采用主动模式进行文件的上传、下载
    系统的备份和恢复
    javascript中的defer
    程序调用批处理完成上传、下载
    vb.net中的ftp上传、拨号、socket通讯的源码
    CF1033G Chip Game
    LG3369 普通平衡树
  • 原文地址:https://www.cnblogs.com/buxizhizhoum/p/6950670.html
Copyright © 2011-2022 走看看