从 python 中删除 sql table 行
Delete sql table rows from python
我可以通过这种方式将我的 python 笔记本成功连接到 sql 服务器 :
from sqlalchemy import create_engine
import sqlalchemy as sa
import urllib
params = urllib.parse.quote_plus('''DRIVER={SQL Server Native Client 11.0};
SERVER= SERVER_NAME;
DATABASE= DATABASE_NAME;
TRUSTED_CONNECTION=YES;''')
engine = create_engine("mssql+pyodbc:///?odbc_connect=%s" % params,case_sensitive=False)
让我们使用这个示例数据框:
df = pd.DataFrame(dict(Name=['abc','def','ghi'],Date=['2018-08-15','2019-08-15','2020-08-15'],Status=[True,False,True],Max=[0,0,8]))
Name Date Status Max
0 abc 2018-08-15 True 0
1 def 2019-08-15 False 0
2 ghi 2020-08-15 True 8
我有一个具有相同列的 sql table,名为 table_name。
Objective :
我想在 table_name 中删除 df 中某行具有相同名称、相同日期、相同状态且 Max = 0 的所有行(仅在 table_name 中,不需要df)
我尝试了以下但它不起作用:
connection = engine.raw_connection()
for index,row in df.iterrows():
try:
cursor = connection.cursor()
sql_Delete_query = """Delete from table_name where Date = %s AND Name = %s AND Status = %s AND Max = 0"""
cursor.execute(sql_Delete_query, (row['Date'],row['Name'],row['Status']))
connection.commit()
except:
error = True
你能帮我弄明白哪里出了问题吗?
不同的库使用不同的符号作为占位符。您正在使用的那个显然使用 ?
而不是 %s
.
sql_Delete_query = """Delete from table_name where Date = ? AND Name = ? AND Status = ? AND Max = 0"""
我可以通过这种方式将我的 python 笔记本成功连接到 sql 服务器 :
from sqlalchemy import create_engine
import sqlalchemy as sa
import urllib
params = urllib.parse.quote_plus('''DRIVER={SQL Server Native Client 11.0};
SERVER= SERVER_NAME;
DATABASE= DATABASE_NAME;
TRUSTED_CONNECTION=YES;''')
engine = create_engine("mssql+pyodbc:///?odbc_connect=%s" % params,case_sensitive=False)
让我们使用这个示例数据框:
df = pd.DataFrame(dict(Name=['abc','def','ghi'],Date=['2018-08-15','2019-08-15','2020-08-15'],Status=[True,False,True],Max=[0,0,8]))
Name Date Status Max
0 abc 2018-08-15 True 0
1 def 2019-08-15 False 0
2 ghi 2020-08-15 True 8
我有一个具有相同列的 sql table,名为 table_name。
Objective :
我想在 table_name 中删除 df 中某行具有相同名称、相同日期、相同状态且 Max = 0 的所有行(仅在 table_name 中,不需要df)
我尝试了以下但它不起作用:
connection = engine.raw_connection()
for index,row in df.iterrows():
try:
cursor = connection.cursor()
sql_Delete_query = """Delete from table_name where Date = %s AND Name = %s AND Status = %s AND Max = 0"""
cursor.execute(sql_Delete_query, (row['Date'],row['Name'],row['Status']))
connection.commit()
except:
error = True
你能帮我弄明白哪里出了问题吗?
不同的库使用不同的符号作为占位符。您正在使用的那个显然使用 ?
而不是 %s
.
sql_Delete_query = """Delete from table_name where Date = ? AND Name = ? AND Status = ? AND Max = 0"""