请教个 sqlalchemy 的查询方式,想把参数传递到执行语句上。。。
写了个函数去解决频发 query 操作:
#从数据库中检查物品名字,如果有,返回物品 ID
def queryItemNameStrGetItemID(tblName,ItemName,engine,conn):
tbl = Table(tblName, metadata,autoload=True,autoload_with=engine)#映射了 tblName 表
s = select([tbl.c.ItemID]).where(tbl.c.ItemName) == ItemName)
res = conn.execute(s) #fetchall 结果只能一次有效
selectreSult = res.fetchall() #selectreSult 是一个 list
if len(selectreSult) == 0:#如果没有内容
return None
else:
return (selectreSult[0])[0]
在程序上实现:
main:
ResultDF = pd.DataFrame(************)
engine = create_engine('mysql+pymysql://root:[email protected]:3306/test?charset=utf8')
queryconn = engine.connect()
for i in ResultDF.itertuples():#对 A 列的物品进行历遍
tmpDFItemNameStr =i[ResultDF.columns.get_loc("A 列") + 1]#从 df 中获取 A 队物品名
tmpID = queryTeamNameStrgetTeamID('iteam_nick',tmpDFItemNameStr ,engine,queryconn)#找 ID
if tmpID:
todoSomethingFunc(tmpID)
print(tmpID,':',tmpDFItemNameStr)
queryconn.close()
问题是在函数里这句:
s = select([tbl.c.ItemID]).where(tbl.c.ItemName) == ItemName)
我想用把函数的参数作为表的字段名传入到这一句,是否可以做到?应该如何写?
select 这个语句的.c.后面的语句,似乎不可以 str 拼接方式完成...
s = select([tbl.c.AnyID]).where(tbl.c.AnyName) == ItemName)
如:
def queryItemNameStrGetItemID(tblName,ItemName,AnyID,AnyName,engine,conn):
这样传入?