2017-03-15 119 views
0

我有我與sqlite3的閱讀在Python 2.7,使用以下命令數據庫:更改數據類型

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

我想查看大於2的列w /值u'2.3'中的值。但這是一個unicode字符串而不是數字,因此很難與一個數字進行比較(例如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 

年長的答案:
如果你想這樣做,在Python端,您可以使用try-除像這樣構建:

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