2017-08-29 55 views
0

對我的SQLite3數據庫進行「SELECT」查詢時,我發現執行一些操作非常麻煩,就像到達數據庫一樣簡單,並獲取一個值,並使其看起來與我在程序中的一樣,就像它在D b。我不太熟悉,不知道這是怎麼回事,或者如果有更好的辦法,我應該做這些事情。有沒有更好的方法在Python3中使用SQLite3「SELECT」查詢結果?

這樣做的第一個元素是在問候的事實是這樣的:

player_name = c.execute("""SELECT name FROM players WHERE pid = ?""", (pid,)) 
print(player_name) 

會產生這樣的事情:

<sqlite3.Cursor object at 0x10c185110> 

我發現的唯一方法提取實際內容是通過遍歷所得光標並將內容存儲在列表中:

player_name = [] 
sql = c.execute("""SELECT name FROM players WHERE pid = ?""", (pid,)) 
for result in sql: 
    player_name.append(result) 
    player_name = str(player_name).replace("[", "").replace("]", "") 

其他元素不是問題,但我想我會把它扔出去。這是事實,從我上面的例子中,每個結果找出來是這樣的:

>>> print(player_name) 
('Ben Johnson',) 

最終,得到確切的串出的分貝,進入我的節目,我做這行每次查詢:

>>> player_name = [] 
>>> sql = c.execute("""SELECT name FROM players WHERE pid = ?""", (pid,)) 
>>> for result in sql: 
>>>  player_name.append(result) 
>>>  player_name = str(player_name).replace("[", "").replace("]", "") 
>>>  player_name = str(player_name).replace("('", "").replace("',)", "") 
>>> 
>>> print(player_name) 

Ben Johnson 

回答

0

execute返回的遊標對象包含行列表(實際上,它們按需計算);你確實應該用for或類似的東西迭代遊標。每個行都是包含所有列值的元組。要獲得第一列,只是做row[0]

for row in c.execute("SELECT SomeColumn FROM ..."): 
    print(row[0]) 

如果你想從一個單排一列值,你可以寫一個輔助函數:

def query_single_value(db, query, *parameters): 
    cursor = db.execute(query, parameters) 
    for row in cursor: 
     return row[0] 
    else: 
     return None # not found 

print(query_single_value(c, "SELECT name FROM players WHERE pid = ?", pid)) 
相關問題