初学者。 我有以下情况。
目的是让脚本一次从文件中读取一行(一个名称),并使用该名称查询Cassandra。
仅供参考,除了当我尝试将列表的值传递给查询时,一切正常。
我目前有类似的东西:
#... driver import, datetime imports done above
#...
with open(fname) as f:
content = f.readlines()
# Loop for each line from the number of lines in the name list file
# num_of_lines is already set
for x in range(num_of_lines):
tagname = str(content[x])
rows = session.execute("""SELECT * FROM tablename where name = %s and date = %s order by time desc limit 1""", (tagname, startDay))
for row in rows:
print row.name + ", " + str(row.date)
如果我删除标记名列表组件并使用名称值编辑查询本身,一切正常。
我在这里做错了什么?
答案 0 :(得分:0)
您可以简单地遍历content
:
for x in content:
rows = session.execute("SELECT * FROM tablename where name = {} and date = {} order by time desc limit 1".format(x, startDay))
for row in rows:
print row.name + ", " + str(row.date)
....
此外,您不需要为字符串添加3个引号。单引号足够好(3个引号用于python中的文档/多行注释)
请注意,这可能会以不同的错误结束;但是你将在线上迭代,而不是迭代索引和读取行。
答案 1 :(得分:0)
简单地基于@Vinny上面的答案,格式只是替换文字值。你需要在它周围加上引号。
for x in content:
rows = session.execute("SELECT * FROM tablename where name ='{}' and date ='{}' order by time desc limit 1".format(x, startDay))
for row in rows:
print row.name + ", " + str(row.date)
答案 2 :(得分:0)
谢谢,@ Vinny和@tejas pandit的输入。
你的投入给了我很多帮助。然而,核心问题是另一回事。
如问题所述,脚本从文件中读取一行,将此行存储在变量中,并将此变量传递给Cassaandra查询。当它从文件读取并存储一行到变量时,它还将新行\n
存储在变量中。因此,Cassandra查询并不真正与\n
一起作为其查询的一部分。我在变量上做了x.strip('\n')
,它运行得很好。