【问题标题】:Python PYODBC with OpenJson Issue带有 OpenJson 问题的 Python PYODBC
【发布时间】:2020-05-21 19:10:53
【问题描述】:

我正在尝试在我的 Python 脚本中运行以下代码,但它因语法错误而失败,我一直无法纠正。第一个插入从网站引入了 json 数据并且运行良好。第二个插入语句格式化 json 代码并将其放入另一个 SQL 表中。此代码在 MSSQL 中运行良好。第二个插入是指缺少结束引号,但我似乎有一个开始和结束引号。它还指未解析的引用 openjson 和未解析的引用交叉应用。我尝试在插入和选择语句周围放置开/关括号,但没有运气。我查看了 github 上的 pyodbc wiki,但没有看到类似的示例。我在这里做错了什么?谢谢。

cursor.execute("Insert Into InboundJson (json) values (?)", (json.dumps(response_json),))
conn.commit()  -- works fine

cursor = conn.cursor()
cursor.execute("Insert into [CCSBC-DW1].[SurveyMonkey].[dbo].Surveylist (SurveyId, Description, WebSite)

Select J_open.*
from
  dbo.InboundJson j
  cross apply
  openjson(j.[json], '$.data') with ( id          int ,
                                      title  varchar(200),

                                      href    varchar(200)) j_open;")
conn.commit()```




【问题讨论】:

  • T-SQL语句正确(当然存储的JSON必须有'data'键),但需要使用SQL Server 2016+。
  • 服务器是 SQL 2019,在那里运行良好。问题是我正在使用的 Python 语法。
  • 此代码在 Python 中不可编译。请发布您收到的确切错误。您应该在任何 pyodbc 错误之前收到 SyntaxError。
  • 当我运行它时,我得到以下信息:
  • 语法错误:扫描字符串时 EOL

标签: python sql sql-server pyodbc


【解决方案1】:

只需对多行字符串使用三引号:

cursor.execute("""INSERT INTO [CCSBC-DW1].[SurveyMonkey].[dbo].Surveylist (SurveyId, Description, WebSite)
                  SELECT J_open.*
                  FROM dbo.InboundJson j
                  CROSS APPLY OPENJSON(j.[json], '$.data') 
                              WITH (id int,
                                    title varchar(200),
                                    href varchar(200)) j_open;
               """)
conn.commit()

【讨论】:

  • 就是这样!感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2012-09-16
  • 2021-09-30
  • 2019-08-26
  • 2012-12-25
  • 1970-01-01
  • 2014-12-24
  • 1970-01-01
  • 2016-06-01
相关资源
最近更新 更多