Python execute SQL merge语句不执行任何操作,但同一语句在SQL Server中工作

Python execute SQL merge语句不执行任何操作,但同一语句在SQL Server中工作,python,sql-server,pandas,Python,Sql Server,Pandas,我有一个数据帧,我上传到一个临时表。这将正确加载(我已将断点插入以进行检查) 然后,我运行了一个merge语句,但似乎什么也没有发生,行没有附加到目标表中(并且这些行在目标表中还不存在) 当我将merge语句复制到sqlserver并执行该语句时,它就会工作,我可以看到新行。因此,我有点不明白为什么在Python中运行该语句时该语句不起作用 我所有的代码都在下面 def my_function(database: str, df: pd.DataFrame) -> None:

我有一个数据帧,我上传到一个临时表。这将正确加载(我已将断点插入以进行检查)

然后,我运行了一个merge语句,但似乎什么也没有发生,行没有附加到目标表中(并且这些行在目标表中还不存在)

当我将merge语句复制到sqlserver并执行该语句时,它就会工作,我可以看到新行。因此,我有点不明白为什么在Python中运行该语句时该语句不起作用

我所有的代码都在下面

def my_function(database: str, df: pd.DataFrame) -> None:

    
params = urllib.parse.quote_plus("DRIVER={SQL Server};"
                                     "SERVER=MY_PC\SQLEXPRESS;"
                                     "DATABASE=" + database + ";"
                                     "Trusted_Connection=yes")

engine = create_engine("mssql+pyodbc:///?odbc_connect={}".format(params))
cnxn = engine.connect()

q = """ 
CREATE TABLE #tdata(hq_id int, 
time_stamp datetime,
pressure float,
p_atom float,
npt2 float,
qstate float)
"""
cnxn.execute(q)    

# upload data into temp table
df.to_sql('tempdb..#tdata', cnxn, if_exists='replace', index=False)

# now do the merge
mq = """
MERGE p_region p
USING [tempdb..#tdata] d
ON p.hq_id = d.hq_id 
    and p.time_stamp = d.time_stamp
WHEN NOT MATCHED by TARGET
    THEN INSERT (hq_id, time_stamp, pressure, p_atom, npt2, qstate)
    VALUES(d.hq_id, d.time_stamp, d.pressure, d.p_atom, d.npt2, d.qstate);
"""
cnxn.execution_options(autocommit=True)
cnxn.execute(mq)
cnxn.close()
engine.dispose()

我想您可能需要在执行行之后使用
cnxn.commit()
显式提交更改。您的数据库中是否有名为
[tempdb..\tdata]
的表?也许你是想用
[tempdb].[#tdata]
来代替,或者更简单地说是
#tdata
?@AlwaysLearning我已经试过了#tdata,这是我通常使用的数据,但是仍然没有发生任何事情。我认为你可能需要在执行行之后使用
cnxn.commit()
来显式提交更改。你有一个名为
[tempdb..tdata]
在您的数据库中?也许您的意思是使用
[tempdb]..[\tdata]
,或者更简单地说是
#tdata
?@一直以来,我都在尝试使用我通常使用的数据,但仍然没有发生任何事情