2017-09-13 1 views
0

여기에서 초급. 다음과 같은 경우가 있습니다.파이썬 목록에서 카산드라 쿼리로 값을 전달합니다.

  • 각 줄에 이름이 들어있는 텍스트 파일.
  • 카산드라 3.5 데이터베이스
  • 파이썬 스크립트

의도 한 번에 파일 한 줄 (하나 개의 이름)에서 읽을 스크립트를 가지고 있고, 그 이름으로 카산드라를 조회하는 것입니다.

참고 : 쿼리의 목록 값을 전달하려고 할 때를 제외하고 모든 것이 올바르게 작동합니다. 나는 태그 이름 목록 구성 요소를 제거하고 이름 값 쿼리 자체를 편집하는 경우

#... 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) 

모든 것이 잘 작동 :

I 전류가 같은 것을 가지고있다.

내가 뭘 잘못하고 있니? 당신은 단순히 content을 반복 할 수

+0

어떤 증상을 보이고 있습니까? 'NameError : name 'tagname'is not defined'? – Vinny

+0

또한'tagname = str (content [x])'의 예상 값은 무엇입니까? None 일 수도 있고 근본 원인 일 수도 있습니다. – Vinny

+0

@Vinny 아쉽게도 오류가 발생하지 않습니다. 인쇄 row.name .... 단순히 인쇄하지 않습니다. 오류가 전혀 없습니다. 그리고 이제, tagname = str (content [x])는 아무 것도 아닙니다. 인쇄 태그 이름이 완벽하게 작동합니다. – bshakya

답변

0

: 또한

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 인용이 사용됩니다)

다른 오류로 종료 될 수 있습니다. 인덱스를 반복하고 선을 읽는 대신 선을 반복 할 것입니다.

+0

감사합니다. 세 따옴표, 여러 줄. 알았다. 코드를 수정했습니다. 그것은 내가 줄 수를 읽지 않아도되는 것을 도왔다. 쿼리에서 스 니펫 당 % s을 {} (으)로 변경했습니다. 'TypeError : 문자열 형식화 중에 모든 인수가 변환되지 않았습니다. ' – bshakya

+0

@bshakya 당신은 None 개체를 가지고있을 수도 있습니다.디버그 인쇄를 사용하여 원본 인쇄 전에 태그 이름 'print type (x)'유형을 확인하십시오. – Vinny

+0

관찰. 'print x'는 분명히 그것의 끝에 \ n을 포함합니다. 그래서 나는 그것을 인쇄 할 때 새로운 줄이 인쇄되는 것을 볼 수있다. 그게 문제가 될 것 같아요? 값을 제거하고 순수한 문자열로 변환하는 방법은 무엇입니까? – bshakya

0

위의 @Vinny의 답을 간단하게 작성하면 format이 단순히 리터럴 값을 대체합니다. 당신은 따옴표를 써야합니다.

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) 
0

감사합니다. @Vinny 및 @tejas 입력에 동의합니다.
입력 사항이 도움이되었습니다. 그러나 핵심적인 문제는 다른 것이 었습니다.

질문에서 언급 한 것처럼 스크립트는 파일에서 한 줄을 읽은 다음이 줄을 변수에 저장하고이 변수를 Cassaandra 쿼리에 전달합니다. 파일에서 변수로 행을 읽고 저장할 때 변수에 새 행 \n을 저장합니다. 따라서 카산드라 쿼리는 쿼리의 일부로 \n과 실제로 작동하지 않았습니다. 변수에 x.strip('\n')을했는데 완벽하게 작동했습니다.

관련 문제