【问题标题】:Cannot insert None using python and mysql in datetime field无法在日期时间字段中使用 python 和 mysql 插入无
【发布时间】:2013-01-12 00:07:13
【问题描述】:

考虑以下代码: 第一个查询不起作用,而第二个查询起作用。 问题是......因为我需要通过一个函数预先编写一个查询,所以这个函数返回一个变量作为'val'。所以我需要让第一个查询工作。第二个查询仅通过示例添加以显示当按字面意思使用“val”的内容时会发生什么。 请帮忙! 所以,我想插入一个日期时间,但也可以接受“无”。当前的错误是:

    query = query % db.literal(args)
TypeError: not enough arguments for format string

现在是脚本:

#!/usr/bin/python

import MySQLdb as mdb

def prepare():
# Assume a database named 'db_test'
    conn = mdb.connect(host   = 'localhost', \
                       user   = 'test',      \
                       passwd = 'test',      \
                       db     = 'db_test')

    cur = conn.cursor()

    cur.execute("DROP TABLE IF EXISTS TBL_TEST")
    cur.execute("CREATE TABLE TBL_TEST(Moo1 DATETIME, Moo2 DATETIME)")

    return cur

if __name__ == '__main__':
    qry = "INSERT INTO TBL_TEST (Moo1, Moo2) VALUES (%s, %s)"
    val = "('2012-04-03 08:40:39', None)"

    cur = prepare()
    cur.execute(qry, val) # NOK
    cur.execute("INSERT INTO TBL_TEST (Moo1, Moo2) VALUES (%s, %s)", ('2012-04-03 08:40:39', None)) # OK

相信我 - 我搜索了整个世界但没有任何成功.. 提前致谢!

【问题讨论】:

    标签: python mysql datetime insert null


    【解决方案1】:

    你的val是一个字符串,应该是一个元组:

    val = ('2012-04-03 08:40:39', None)
    

    【讨论】:

    • 这适用于示例。 “真实”代码如下(只是一小部分): val = (parseRow(cursor1),) 这使得 val 成为一个元组(用 'print type(val)' 检查) cursor2.execute(qry, val) 给出: query = query % db.literal(args) TypeError: not enough arguments for format string 我在这里做错了什么?
    • parseRow 是否返回单个值?那你要val = (parseRow(cursor1), None)
    • Parserow 返回一个动态组合的字符串类型。因此,我不能把“无”放在后面。我试过 'val = (parseRow(cursor1),)' 来强制执行一个元组,但没有运气
    • 更多信息:def parseRow(cur): values = [] for field in cur.fetchone(): if (field): values.append(field.strftime('%Y-%m- %d %H:%M:%S')) else: values.append(str(field)) 返回值 'print var' 导致: ['2012-04-03 08:40:39', 'None' ] 我怎样才能让 parseRow 返回我可以执行的东西()?
    • 要将其转换为元组,请致电tuple:val = tuple(parseRow(cursor1))
    猜你喜欢
    • 1970-01-01
    • 2015-08-15
    • 2014-10-24
    • 2014-12-31
    • 1970-01-01
    • 2012-01-23
    • 1970-01-01
    • 2015-12-18
    • 1970-01-01
    相关资源
    最近更新 更多