Простой вопрос sqlite - PullRequest
       7

Простой вопрос sqlite

5 голосов
/ 10 ноября 2010

Когда я использую:

for i in Selection:
    Q = "SELECT columnA FROM DB WHERE wbcode='"+i+"' and commodity='1'"
    cursor.execute(Q)
    ydata[i] = cursor.fetchall()

Я получаю:

ydata = {'GBR': [(u'695022',), (u'774291',), (u'791499',)... ]}

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

ydata = {'GBR': [695022, 774291, 791499,...]}

Большое спасибо,Обс: это просто упрощенный пример.попытаться воздержаться от рекомендаций по внедрению sql.

Ответы [ 2 ]

4 голосов
/ 10 ноября 2010
[int(x[0]) for x in cursor.fetchall()]
2 голосов
/ 11 ноября 2010

Исходя из этого и другого вашего вопроса, вам нужно понять сходство SQLite и то, как вы заполняете базу данных. Другие базы данных требуют, чтобы значения, хранящиеся в столбце, были одного и того же типа - например, все строки или все целые числа. SQLite позволяет хранить что угодно, поэтому тип в каждой строке может быть разным.

В первом приближении, если вы введете строку для этой строки, вы получите строку, введите целое число и получите целое число. В вашем случае вы получаете строки, потому что вы помещаете строки вместо целых чисел.

Однако вы можете объявить сходство столбцов, и SQLite попытается преобразовать их при вставке данных. Например, если столбец имеет целочисленное сходство, то если то, что вы вставляете, можно безопасно / правильно преобразовать в целое число, то SQLite сделает это, поэтому строка «1» действительно будет сохранена как целое число 1, а «1 1» будет сохранена. в виде строки «1 1».

Прочтите эту страницу, чтобы понять детали. Вам будет гораздо проще получать данные, если вы введете их с использованием правильных типов.

http://www.sqlite.org/datatype3.html

Если вы импортируете данные CSV, запустите оболочку APSW и используйте «.help import», чтобы получить некоторые советы о том, как с этим справиться.

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