Python游标出错

时间:2016-04-27 22:43:46

标签: python sql

我编写了一个直接在DB中插入python游标对象的脚本

 cursor.execute("INSERT INTO info ([height], [weight],[type]) VALUES (%s,%s,%s)" % (height, manufacturerid, weight)) 

有时候我没有体重"体重"它会引发错误:

Incorrect syntax near ','. (102) (SQLExecDirectW)")

你如何处理这样的错误?

3 个答案:

答案 0 :(得分:1)

根据文档,你不应该这样做(你的方式):

var s = "22123222222213123212322123213222";
var a = s.split("");
var b = a.map(Number);

你应该按如下方式进行:

cursor.execute("INSERT INTO info ([height], [weight],[type]) VALUES (%s,%s,%s)" % (height, manufacturerid, weight))

检查this以获取更多帮助。

答案 1 :(得分:0)

使用try,除了参见python docs:https://docs.python.org/2/tutorial/errors.html

答案 2 :(得分:0)

您不应该对sql查询使用字符串格式。让它在更合适的层处理:

而不是:

@ConditionalOnProperty(prefix = "jms", value = "useCachingConnectionFactory", havingValue = "true", matchIfMissing = false)
public class CachingConnectionFactoryDecoratingPostProcessor implements BeanPostProcessor
{

    @Override
    public Object postProcessBeforeInitialization(Object bean, String beanName) throws BeansException
    {
        return bean;
    }

    @Override
    public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException
    {
        if (bean instanceof ConnectionFactory)
        {
            return new CachingConnectionFactory((ConnectionFactory) bean);
        }
        return bean;
    }
}

使用

cursor.execute("INSERT INTO info ([height], [weight], [type]) VALUES (%s,%s,%s)" %(height, manufacturerid, weight))

可能会解决您的问题,并且不会受到sql注入或您所拥有的问题的影响。

由于这似乎是Oracle,我没有在Python中使用它,请参阅文档,但PEP 249声明参数化查询的占位符是: https://www.python.org/dev/peps/pep-0249/#paramstyle