如何使用SQL IN子句作为参数

时间:2018-09-05 21:00:44

标签: sql python-3.x pandas

我尝试使用python和pandas并使用SQL事件探查器来编写SQL IN子句,我发现以下内容是从python程序传递到SQL Server的,但是没有返回任何数据-我假定由于以下原因,它正在生成内部错误格式错误,但我无法确定问题所在:

declare @p1 int
set @p1=NULL
exec sp_prepexec @p1 output,N'@P1 nvarchar(22)',N'
               SELECT [Date], [Person], [Amount]
               FROM [Logs].[dbo].[Results]
               WHERE [Date] >= GETDATE()-1 AND [Person] IN @P1',N'(''person1'', ''person2'')'
select @p1

有人可以帮我找出问题所在吗?

3 个答案:

答案 0 :(得分:0)

您可以在此处尝试多种方法来诊断问题:

  1. 将查询保存到字符串变量,打印并在数据库上运行。
  2. 如果上述步骤返回结果,则问题出在您的查询中。然后,我将检查数据库配置 在您的python脚本/配置文件中放置。
  3. 如果数据库配置似乎正确,请尝试添加 和except块捕获有关任何异常的更多详细信息 发生。

如果您使用的是pyodbc,请查看以下链接: 了解如何处理错误:

how to catch specific pyodbc error message

答案 1 :(得分:0)

我不相信您可以像这样将“ IN”字符串指定为参数。但是,这将在sql server中工作。如果不是sql,则找到类似的功能,或者编写自己的功能。

s3.listBuckets({}, function(err, data) {
    if (err) {
        console.log(err, err.stack); // an error occurred
    } else {
        var bucketList = JSON.parse(JSON.stringify(data.Buckets));
        var promises = bucketList.map(function(b) {
            var promise = s3.getBucketEncryption({ 'Bucket':b.Name }).promise();
            return reflect(promise).then(function(value) {
                return Object.assign(value, { 'bucket':b });
            });
        });
        Promise.all(promises).then(function(values) {
            for(let i in values) {
                // each value now has a '.bucket' property.
                console.log([values[i].bucket.name, values[i].cryptSetting, values[i].status].join(' '));
            }
        });
    }
});

答案 2 :(得分:0)

经过一番回顾并与dbadmin快速聊天之后,我认为使用python动态构建查询对我来说更简单。感谢您的努力。