【发布时间】:2022-01-05 06:37:42
【问题描述】:
我正在尝试使用传递给 Python 的动态 SQL 来执行,但无法为 @key 获得正确的引号组合。这是过程:
create procedure [dbo].[pr_select_to_html_table]
(
@key varchar(100),
@sql_query nvarchar(max) = null
)
AS
DECLARE @NewScript NVARCHAR(MAX)
SET @NewScript = N'
import pandas as pd
import pyodbc
def exec_sql (query) :
# execute sql query with no return
cnxn_p = pyodbc.connect("driver={odbc driver 17 for sql server};server=localhost;DATABASE=trader;trusted_connection=yes;")
cursor_p = cnxn_p.cursor()
try:
cursor_p.execute(query)
except pyodbc.Error as err:
print(err)
cnxn_p.commit()
#Read Data From Input @input_data_1
df = my_input_data
df.index = df.index+1
result = df.to_html()
sql = "insert into wrk.html_table (key,html_result) values (''' + @key + ''' ,''" + result + "'')"
exec_sql(sql)
'
EXEC sp_execute_external_script
@language = N'Python'
, @Script = @NewScript
, @input_data_1 = @sql_query
, @input_data_1_name = N'my_input_data'
Python 提供了两个错误,我认为第一个错误可能不适用: UserWarning: Pandas doesn't allow columns to be created via a new attribute name - see https://pandas.pydata.org/pandas-docs/stable/indexing.html#attribute-access setattr(result, "var_info", var_info)
第二个 Python 错误是:('42000', "[42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]关键字'key'附近的语法不正确。(156) (SQLExecDirectW)")
三单引号不行,单双单引号也不行。
(是的,我将 SQL 从 SQL Server 传递到 Python,然后连接到 SQL Server 并执行 SQL。to_html() 方法值得努力)。
【问题讨论】:
标签: sql python-3.x sql-server-2019