Python:无法连接str和NoneType对象

2024-05-22 21:00:34 发布

您现在位置:Python中文网/ 问答频道 /正文

sql = """
        INSERT INTO [SCHOOLINFO] 
        VALUES(
            '""" + self.accountNo + """', 
            '""" + self.altName + """',
            '""" + self.address1 + """',
            '""" + self.address2 + """',
            '""" + self.city + """',
            '""" + self.state + """',
            '""" + self.zipCode + """',
            '""" + self.phone1 + """',
            '""" + self.phone2 + """',
            '""" + self.fax + """',
            '""" + self.contactName + """',
            '""" + self.contactEmail + """',
            '""" + self.prize_id + """',
            '""" + self.shipping + """',
            '""" + self.chairTempPass + """',
            '""" + self.studentCount + """'
        )
    """;

我有以下代码,Python不断抛出错误,它可以连接字符串和非类型对象。问题是我已经验证了这里的每个变量实际上是一个字符串,并且不是空的。今天我在这件事上耽搁了很长一段时间,任何帮助都将不胜感激。


Tags: 字符串selfcitysqlinsertstatevalueszipcode
3条回答

像这样组合SQL查询是非常危险的,特别是由于sql-injection

如果使用MySqldb更好的替代方法是:

db.query("INSERT INTO [SCHOOLINFO] VALUES(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)",
[self.accountNo, self.altName, self.address1, self.address2, self.city, self.state, self.zipCode, self.phone1, self.phone2, self.fax, self.contactName, self.contactEmail, self.prize_id, self.shipping, self.chairTempPass, self.studentCount])

到目前为止,所有这些答案都不是集中在你的问题上,而是集中在要做的事情上。是的,是的-绑定变量更好更安全。是的,使用%进行格式化更快,而且可能更好。

但是关于你的问题,是什么给了你这个错误,它必须是,其中一个值在某一点上不是,没有其他的解释。只需在前面打印一个调试结果,比如:

for v in 'accountNo altName address1 address2 city state zipCode phone1 phone2 fax contactName contactEmail prize_id shipping chairTempPass studentCount'.split():
    if getattr(self, v) is None:
        print 'PANIC: %s is None' % v

我敢打赌它会在某个时候打印一些东西;-)

改为使用绑定变量。下面是在Python中使用DBs的规范:PEP 249: Python Database API Specification v2.0

更新:根据pymssql的文档,您需要如下内容:

sql = """
    INSERT INTO [SCHOOLINFO] 
    VALUES(
        %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %d, %s, %s, %d
    )"""
cur.execute(sql, self.accountNo, self.altName, self.address1, self.address2, self.city, self.state, self.zipCode, self.phone1, self.phone2, self.fax, self.contactName, self.contactEmail, self.prize_id, self.shipping, self.chairTempPass, self.studentCount)

相关问题 更多 >

    热门问题