Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python、MySQL在使用变量时不插入。可以在适当的位置使用变量的精确值,并且可以正常工作_Python_Mysql - Fatal编程技术网

Python、MySQL在使用变量时不插入。可以在适当的位置使用变量的精确值,并且可以正常工作

Python、MySQL在使用变量时不插入。可以在适当的位置使用变量的精确值,并且可以正常工作,python,mysql,Python,Mysql,具有以下代码: import os import sys import time import MySQLdb if __name__=="__main__": dbcon = MySQLdb.connect(host="host", port=3306, user="db", passwd="passwd", db="adki") dbcur = dbcon.cursor() deliveryCount = 0 bounceBadMailbox = 0 bounceInactiveAcc

具有以下代码:

import os
import sys
import time
import MySQLdb

if __name__=="__main__":

dbcon = MySQLdb.connect(host="host", port=3306, user="db", passwd="passwd", db="adki")
dbcur = dbcon.cursor()

deliveryCount = 0
bounceBadMailbox = 0
bounceInactiveAccount = 0
bouncePolicyRelated = 0
bounceSpamRelated = 0
bounceQuotaIssues =0

while True:
    #type, timeLogged,timeQueued,orig,rcpt,orcpt,dsnAction,dsnStatus,dsnDiag,dsnMta,bounceCat,srcType,srcMta,dlvType,dlvSourceIp,dlvDestinationIp,dlvEsmtpAvailable,dlvSize,vmta,jobId,envId,queue,vmtaPool
    line = sys.stdin.readline()
    logList = line.split(',')
    bounceType = str(logList[0])
    if bounceType != "type":
        bounceType = str(logList[0])
        bounceCategory = logList[10]
        emailAddress = logList[4]
        jobId = str(logList[23])
        fwrite = open("debug.log","a")
        fwrite.write(jobId)

        if bounceType == "d":
            deliveryCount += 1
            fwrite = open("debug2.log","a")
            fwrite.write(str(jobId))
            dbcur.execute('UPDATE campaign_stat_delivered SET pmta_delivered = pmta_delivered + 1 WHERE id = ' + jobId)
            dbcon.commit()





fwrite = open("debug2.log","w")
fwrite.write("out of true loop")

dbcon.close()
python新手。这真让我难堪。上面的SQL语句不起作用(pmta_delivered的值仍然为0),但我可以运行:

dbcur.execute('UPDATE campaign_stat_delivered SET pmta_delivered = pmta_delivered + 1 WHERE id = ' + '42')
而且它有效!?!。在'debug2.log'中,我写入了值'42'。发生什么事了

数据库架构:

--
-- Table structure for table `campaign_stat_delivered`
--

CREATE TABLE IF NOT EXISTS `campaign_stat_delivered` (
  `id` int(9) NOT NULL AUTO_INCREMENT,
  `pmta_delivered` int(9) NOT NULL DEFAULT '0',
  `async_bounces` int(9) NOT NULL DEFAULT '0',
  `bad_mailbox` int(11) NOT NULL DEFAULT '0',
  `inactive_account` int(11) NOT NULL DEFAULT '0',
  `policy_related` int(11) NOT NULL DEFAULT '0',
  `spam_related` int(11) NOT NULL DEFAULT '0',
  `quota_issues` int(11) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
同样,我可以将sql更改为:

dbcur.execute('UPDATE campaign_stat_delivered SET pmta_delivered = pmta_delivered + 1 WHERE id = 1')

而且效果很好。真是目瞪口呆。

假设您的jobId是显示整数值的字符串,我建议

添加断言,确保字符串长度非零 请确保字符串为整数格式

assert len(jobId) > 0
try:
    int(jobId)
except ValueError:
    print "ERROR: jobId is not in format of integer"
    raise

这可能会告诉您,原因是什么。

您可能需要使用
str(jobId)
。然而,这很难说,因为你没有解释它是如何不起作用的。你收到错误信息了吗?如果是这样,请在您的帖子中包含完整的错误消息。我想可能是str或int的问题(数据库是int)。它不起作用,因为它不给pmta_提供价值。(我已经尝试了str和int,但都不起作用。请注意在您的问题中提供正确缩进的代码。不确定您的意思吗?另外,仅供参考,我只是尝试了jobId='8',这也没有提供pmta_交付的值。?:\尝试了这个,没有错误。还尝试了只执行jobId='8',但它仍然不执行查询。真的不明白为什么不能这样做。)正在工作。告诉我们更多信息-在执行过程中是否有任何错误消息?具体是什么?提供您尝试更新的表的架构将显示,预期的类型是什么。数据库日志文件中有任何投诉?更新了问题以显示db架构。还提供了工作正常的SQL代码。没有错误。将查看db日志。是否有w当python尝试插入时,我可以用python记录响应吗?我真的尝试了我所能想到的一切组合!因此,将数据库更改为“varchar”,并执行jobid='4',我得到了一个插入..因此取得了进展,但就目前而言,从我的日志列表中获取实际的“jobid”不起作用。