Q:

SQLite3 и Python3, вызов данных из БД

Вызываю данные из БД, при вызове вроде
c.execute("""
SELECT smth FROM smth
""")
c.fetchone()

Я получаю список из одного элемента, а при 
c.execute("""
SELECT smth FROM smth
""")
c.fetchall()

Я получаю кортеж из списков по одному элементу.
 Могу ли я получить просто кортеж из строк, а не списков, внутри которых по строке? могу ли я сразу считывать из БД текст как строки, а числа как числа?

A:

Пример с использованием SQL Alchemy:
Сначала создаем SQLite DB:
C:\Temp>sqlite3 c:\temp\a.db
SQLite version 3.13.0 2016-05-18 10:57:30
Enter ".help" for usage hints.
sqlite> .headers on
sqlite> .mode column
sqlite> create table tab(name varchar(50), val int);
sqlite> insert into tab values ('A', 1), ('A', 2), ('A', 3), ('B', 2), ('B', 4), ('C', 6);
sqlite> select * from tab;
name        val
----------  ----------
A           1
A           2
A           3
B           2
B           4
C           6
sqlite> .exit

Теперь воспользуемся SQLAchemy:
In [101]: from sqlalchemy import create_engine

In [102]: engine = create_engine('sqlite:///c:/temp/a.db')

In [103]: conn = engine.connect()

In [104]: conn.execute('select * from tab').fetchall()
Out[104]: [('A', 1), ('A', 2), ('A', 3), ('B', 2), ('B', 4), ('C', 6)]

Строки и целые (int) определились правильно...
Чтобы получить список строк, вместо списка кортежей:
In [106]: rows = conn.execute('select name from tab').fetchall()

In [107]: rows
Out[107]: [('A',), ('A',), ('A',), ('B',), ('B',), ('C',)]

In [108]: names = [x[0] for x in rows]

In [109]: names
Out[109]: ['A', 'A', 'A', 'B', 'B', 'C']

или:
In [113]: from operator import itemgetter

In [114]: list(map(itemgetter(0), conn.execute('select name from tab').fetchall()))
Out[114]: ['A', 'A', 'A', 'B', 'B', 'C']

