Когда я использую:
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,...]}
Большое спасибо. obs: это просто упрощенный пример. попытайтесь воздержаться от рекомендаций по SQL-инъекции.
[int(x[0]) for x in cursor.fetchall()]
Исходя из этого и другого вашего вопроса, вам нужно понять близость SQLite и то, как вы заполняете базу данных. Другие базы данных требуют, чтобы значения, хранящиеся в столбце, были одного типа - например, всех строк или всех целых чисел. SQLite позволяет хранить что-либо, чтобы тип в каждой строке отличался.
В первом приближении, если вы введете строку для этой строки, вы получите строку, поместите целое число и вы получите целое число. В вашем случае вы получаете строки из-за того, что вместо строк вы помещаете строки.
Однако вы можете объявить аффинность столбца, и SQLite попытается преобразовать, когда вы вставляете данные. Например, если столбец имеет целочисленное сродство, то если то, что вы вставляете, можно безопасно/правильно преобразовать в целое число, тогда SQLite сделает это, поэтому строка "1" действительно будет сохранена как целое число 1, в то время как "1 1" будет сохранено как строка "1 1".
Прочитайте эту страницу, чтобы понять детали. Вы обнаружите, что намного проще получить данные, если вы положите их на использование правильных типов.
http://www.sqlite.org/datatype3.html
Если вы импортируете CSV-данные, запустите оболочку APSW и используйте ".help import", чтобы получить некоторые предложения о том, как с этим справиться.
Selection
происходит из пользовательского ввода), но также влияет на кэширование операторов. На самом деле, сделать это правильно не сложнее, поэтому нет никакого оправдания для ручного построения ваших операторов SQL.