请教个 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:root123@192.168.89.66: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):
这样传入?
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.