2009-07-15 9 views
1

파이썬 스크립트에서 sqlite 데이터베이스에 간단한 쿼리를 작성하려고합니다. 내 매개 변수가 올바른지 테스트하려면 ipython 명령 줄에서 쿼리를 실행 해 보았습니다. 다음과 같이 보입니다.sqlite에 쿼리를 제출할 때 IPython이 여러 필드가있는 레코드를 반환 할 수없는 이유는 무엇입니까?

import sqlite3 
db = 'G:\path\to\db\file.sqlite' 
conn = sqlite3.connect(db) 
results = conn.execute('SELECT * FROM studies').fetchall() 

내 결과가 완전히 비어 있습니다. 그런 다음 다른 테스트 쿼리를 시도했습니다.

results = conn.execute('SELECT id FROM studies').fetchall() 

올바르게 반환되었습니다. 별표 ([WRONG, SEE SEC UPDATE UPDATE BELOW])에 문제가있는 것으로 생각하여 기본 파이썬 명령 줄에서 'SELECT * FROM studies'쿼리를 시도했습니다. 보라, 보라, 올바르게 돌아왔다. 별표를 벗어나기 위해 모든 일반적인 방법을 시도했지만 다양한 오류 메시지가 나타납니다. IPython에서이 쿼리를 실행할 방법이 있습니까?


EDIT : 죄송합니다. IronPython과 IPython이 동일하다고 잘못 생각했습니다. 내가 의미했던 것은 IPython 명령 줄이었고 IronPython 프레임 워크는 아닙니다.


EDIT2 : 여기에 게시 된 제안에서

'SELECT COUNT(*) FROM studies' 

,이 레코드를 반환하는 시도에서 오류가 발생 밝혀 : 좋아, 그것은 별표이 성공적으로 쿼리와 같이 작업 않습니다 밝혀 여러 필드 (예 :

). 결과로 여전히 레코드가 반환됩니다. 그에 따라 질문의 제목을 변경했습니다.

답변

1

이것은 SQL입니다. IronPython은 쿼리 처리와 관련이 거의 없거나 전혀 없습니다. 비정상적인 문자 인코딩을 사용하고 있습니까? (IE가 아닌 UTF-8 또는 ASCII)?

당신이 SELECT id,fieldname,fieldname FROM studies하면 어떻게됩니까

(즉, '*'무엇을 시뮬레이션.) 그냥 추측

+0

'*'쿼리를 시뮬레이션해도 아무 것도 반환되지 않았습니다. 그것은 하나의 필드를 물어볼 때 쿼리가 작동하는 것 같습니다. 나는 당신이 일반적인 파이썬 명령 줄에서 제안한 쿼리를 시도하고, 나는 정확한 답을 얻었다. 이로 인해 ironpython은 SQL 쿼리를 보내기 전에 약간 다른 방식으로 작업하고 있다고 생각하게됩니다. – Francisco

+0

인터프리터 프롬프트에서 쿼리를 실행하는 경우 반환 값은 무엇입니까? – Christopher

0

하지만, 데이터베이스 파일의 경로에서 백 슬래시 탈출을 시도하십시오.대신

db = 'G:\path\to\db\file.sqlite' 

의 즉 당신이 시도 할 수 디버깅

db = 'G:\\path\\to\\db\\file.sqlite' 
+0

아니, 차이가 없다. – Francisco

1

좀 더 시도 :

s = 'SELEECT * from studies' 
print s 
conn.execute(s).fetchall() 

나 :

s = 'SELECT ' + chr(42) + ' from studies' 
conn.execute(s).fetchall() 

당신은 또한 시도 할 수 있습니다를 :

를3210
conn.execute('select count(*) from studies').fetchall() 

이 다시로 온다면 [(0)] 다음 정말 이상한 일이 당신이 시도 할 수 :-)에


좀 더 일을 것입니다 :

conn.execute('select id from (select * from studies)').fetchall() 

또는 :

cur = conn.cursor() 
cur.execute('select * from studies').fetchall() 
+0

처음 두 제안은 0 개의 결과를 반환합니다. : '조사에서 select count (*)'올바른 행 금액을 반환하므로 별표 문자가 여전히 올바르게 작동합니다. 지금은 하나 이상의 필드에서 결과를 반환하려고하면 오류가 발생합니다. 즉 : '필드 1, 필드 2에서 연구를 선택하십시오' – Francisco

1

IPython 및 sqlite에서 언급 한 모든 것들을 문제없이 시도했습니다 (ipython 0.9. 1, 파이썬 2.5.2).

이것이 버전 불일치 문제 일 수 있습니까? 쉘이 다른 라이브러리를 참조하고있을 수 있습니까?

예를 들어

은 모두 쉘 (즉 ipython과 SQL 쿼리가 작동하는 일반 일)에서

import sqlite3; print sqlite3.version 

반환 같은 일을?

어떻게 같은 일을 반환

conn.execute('select sqlite_version()').fetchall() 

합니까 어떻습니까?

+0

내 ipython 버전도 0.9.1이지만 파이썬 2.6.2를 사용하고 있습니다. 두 쉘 모두 질문과 일치하는 버전이 있습니다. 'sqlite3.version'이 반환되었습니다. 2.4.1 및 'SELECT sqlite_version()'이 반환되었습니다. 3.5.9 – Francisco