Как избавиться от запятой? - PullRequest
0 голосов
/ 21 марта 2020
import sqlite3

conn = sqlite3.connect('contacten.db')

c = conn.cursor()

#c.execute("""CREATE TABLE mail (
#           mail text
#           )""")

#c.execute("INSERT INTO mail VALUES ('test@gmail.com')")

conn.commit()

c.execute("SELECT * FROM mail")

print(c.fetchall())

conn.commit()
conn.close()

Это код, который я сделал, но в результате я получаю:

[('test@gmail.com',), ('test1@gmail.com',), ('test2@gmail.com',)]

Но в этом массиве у меня слишком много запятых. ,), нравится. Кто-нибудь из вас знает, как избавиться от этой лишней запятой?

Ответы [ 3 ]

3 голосов
/ 21 марта 2020

Запятые есть по уважительной причине, ваш результат - список кортежей ; это следствие того, что sqlite представляет набор результатов, сами данные не содержат запятых:

result = c.fetchall()
print(result)
=> [('test@gmail.com',), ('test1@gmail.com',), ('test2@gmail.com',)]

Это потому, что в каждой строке может быть более одного поля. В вашем случае у вас есть только одно поле, но Python не может просто удалить запятую, потому что если бы мы это сделали, вы бы получили список элементов в скобках, а не список кортежей (см. здесь , чтобы понять, почему).

Конечно, если вы уверены, что в результате будет только одно поле на строку, вы можете просто избавиться от кортежей, извлекая одно (и единственное) поле из каждая строка на момент печати результата:

result = c.fetchall()
print([f[0] for f in result])
=> ['test@gmail.com', 'test1@gmail.com', 'test2@gmail.com']
2 голосов
/ 21 марта 2020

Использование python zip :

>>> emails = [('test@gmail.com',), ('test1@gmail.com',), ('test2@gmail.com',)]
>>> emails, = zip(*emails)
>>> type(emails)
<type 'tuple'>
>>> emails
('test@gmail.com', 'test1@gmail.com', 'test2@gmail.com')
>>> list(emails)
['test@gmail.com', 'test1@gmail.com', 'test2@gmail.com']
0 голосов
/ 21 марта 2020
import sqlite3                                                                                      

conn = sqlite3.connect('contacten.db')                                                              

c = conn.cursor()                                                                                   

#c.execute("""CREATE TABLE mail (                                                                       
#           mail text                                                                               
#           )""")                                                                                   
#c.execute("INSERT INTO mail VALUES ('test@gmail.com')")                                            
#c.execute("INSERT INTO mail VALUES ('test1@gmail.com')")                                           
#c.execute("INSERT INTO mail VALUES ('test2@gmail.com')")                                           

conn.commit()                                                                                       

c.execute("SELECT * FROM mail")                                                                     

#print(c.fetchall())                                                                                

for item in c.fetchall():                                                                           
    print item[0]                                                                                   

conn.commit()                                                                                       
conn.close()                                                                                        
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...