2017-03-15 2 views
0

난 다음 명령을 사용하여, 파이썬 2.7에서 sqlite3를 함께 읽고있다 데이터베이스가 있습니다변경 데이터 형식

# Change to database directory 
os.chdir(data) 
# Find database file 
cur_db = glob.glob('*.db') 
# Connect to database 
con = sqlite3.connect('database.db') 
c = con.cursor() 
# Query database 
print(len(available_table)) 
for row in c.execute('SELECT * FROM col1 '): 
     print row 

나에게 같은 것을 제공 :

(1, u'2.3', u'brown', u'0', u'hairy', u'banana', u'2', u'monkey')

열의 값을보고 싶습니다. u'2.3'보다 큰 값은 2입니다. 그러나 이것은 숫자가 아닌 유니 코드 문자열이므로 숫자와 비교하기가 어렵습니다 (예 : 2).

# Connect to database 
con = sqlite3.connect('database.db') 
c = con.cursor() 
# Query database 
c.execute('SELECT * FROM critter WHERE weight > 2'. 

질문 :

적으로는, 내가 좋아하는 뭔가를하고 싶은 나는 조건문이 요소가 2보다 큰 경우에만 데이터 행을 추출를 추가 할 수 있습니까? 데이터베이스를 변경하지 않고 그대로두고 싶습니다.

답변

1

편집 : 오, 당신은 쿼리가 원하는 당신은 할 수 ... 있음 :

for row in c.execute('select * from critter where cast(weight as numeric) > 2'): 
    # do something 

이전 대답 : 당신은 파이썬 측에서이 작업을 수행하려면
가 은 제외하고 시도-A를 사용할 수 있습니다 다음과 같이 구성하십시오 :

for row in c.execute('SELECT * FROM col1'): 
    try: 
    val = float(row[1]) # number here is the number of the element in the tuple 
    if val > 2: 
     print(val) 
    except ValueError: 
    pass 
+0

제가 물어 본 질문에 대해 귀하의 솔루션은 아마도 작동 할 것입니다 (나는 시도하지 않았습니다). 나는 정말로 묻고있는 것을 명확히하기 위해 질문을 편집했다. (예를 들어, for 루프를 사용하여 테이블에서 데이터를 추출하지 않는다.) – AaronJPung

+0

@AaronJPung : 아, 알겠습니다. 답을 주셔서 감사합니다. 내 대답을 편집했습니다. – bernie

+0

당신은 여러분의 솔루션이 완벽하게 작동합니다. 실행 호출에서'cast'를 사용하는 것을 결코 들어 보지 못했습니다. – AaronJPung