在 SQL 查询中使用 python 变量

问题描述 投票:0回答:1

我想使用python做一个SQL查询,提示用户输入以完成查询。目前,当我运行代码时,它会告诉我有一个 TypeError (请参阅下面的完整错误消息)。我的代码将首先发布在下面。

import pyodbc
from datetime import datetime
import pandas as pd

def today():
    return datetime.now().strftime('%Y-%m-%d')
##    return (datetime.now()+timedelta(days=1)).strftime('%Y-%m-%d')


#create connection string
conn = pyodbc.connect('Driver={SQL Server};'
                      'Server=OPTSAPPS02,1433\\SQLEXPRESS;'
                      'Database=OPTS Production Tracking Service;'
                      'UID=fetch;'
                      'PWD=Reader123')

cursor = conn.cursor()

#create query parameter for target
targetDTString = today()+' 23:59'
targetDate = datetime.strptime(targetDTString,'%Y-%m-%d %H:%M')

###FIND A WAY TO TAKE INPUT FOR QUERY AND MAKE IT SO YOU CAN SEARCH/FILTER BY MOTHER AND STAMPER NUMBER####

query = cursor.execute("""SELECT TOOL_OUT, TANK, STATION, FORMING_CURRENT, TIME, BUILDING_CURRENT, CYCLE_TIME FROM ELECTROFORMING
    WHERE PROCESS='ELECTROFORMING' AND (TOOL_OUT=?)""", (input("TOOL_OUT: ")))
    
DF = pd.read_sql_query(query,conn)
print(DF)

回溯(最近一次调用最后一次): 文件“C:\Users\mberardi\Documents\python scripts\print-eforming-stats.py”,第 39 行,位于 DF = pd.read_sql_query(查询,conn) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件“C:\Users\mberardi\AppData\Local naconda3\Lib\site-packages\pandas\io\sql.py”,第 486 行,在 read_sql_query 中 返回 pandas_sql.read_query( ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件“C:\Users\mberardi\AppData\Local naconda3\Lib\site-packages\pandas\io\sql.py”,第 2328 行,在 read_query 中 游标 = self.execute(sql, 参数) ^^^^^^^^^^^^^^^^^^^^^^^^^^^ 文件“C:\Users\mberardi\AppData\Local naconda3\Lib\site-packages\pandas\io\sql.py”,第 2260 行,执行中 raise TypeError("查询必须是字符串,除非使用 sqlalchemy。") 类型错误:查询必须是字符串,除非使用 sqlalchemy。

python sql pyodbc
1个回答
0
投票

您必须直接将

query
作为字符串传递,而不使用
conn.cursor()
并将
TOOL_OUT
值作为元组传递到
params

query = """SELECT TOOL_OUT, TANK, STATION, FORMING_CURRENT, TIME, BUILDING_CURRENT, 
    CYCLE_TIME FROM ELECTROFORMING
    WHERE PROCESS='ELECTROFORMING' AND (TOOL_OUT=?)"""

tool_out = input("TOOL_OUT: ")
DF = pd.read_sql_query(query, conn, params=(tool_out,))
print(DF)
© www.soinside.com 2019 - 2024. All rights reserved.