SQLAlchemy 给出 TypeError 从 SQLite 数据库中读取字符串

SQLAlchemy giving TypeError reading strings from SQLite database

这是从 SQLite 数据库中的表中读取数据的代码:

db_path = 'test.db'

import sqlalchemy as db
engine = db.create_engine('sqlite:///'+db_path)
inspector = db.inspect(engine)
table_names = inspector.get_table_names()
conn = engine.connect()
md = db.MetaData()

for tname in table_names:
    table = db.Table(tname, md, autoload=True, autoload_with=engine)
    print('Table ' + tname + ' columns: ' + str(table.columns.keys()))
    query = db.select([table])
    table_data = conn.execute(query).fetchall()
    for tdata in table_data:
        print('Data row: ' + str(tdata))

这是工作版本的输出:

Table address columns: ['id', 'email_address', 'user_id']
Table user_account columns: ['id', 'name', 'fullname']
Data row: (1, 'sandy', 'Sandy Cheeksworth')
Data row: (2, 'johnny boy', 'John Snow')
Data row: (3, 'fred', 'Fred Flintstone')
Data row: (4, 'barney', 'Barney Rubble')
Data row: (5, 'squidward', 'Squidward Tentacles')
Data row: (6, 'ehkrabs', 'Eugene H. Krabs')
Data row: (7, 'snoop', 'Calvin Cordozar Broadus Jr.')
Data row: (8, 'jay-z', 'Shawn Corey Carter')
>>>

如果我使用 SQLiteStudio 将第二个字段从 varchar 类型更改为 string 类型,事情就会变得很糟糕。这是“预调试”输出:

Table address columns: ['id', 'email_address', 'user_id']
Table user_account columns: ['id', 'name', 'fullname']
Traceback (most recent call last):
  File "<stdin>", line 6, in <module>
  File "D:\Programs\Python\lib\site-packages\sqlalchemy\engine\result.py", line 992, in fetchall
    return self._allrows()
  File "D:\Programs\Python\lib\site-packages\sqlalchemy\engine\result.py", line 402, in _allrows
    made_rows = [make_row(row) for row in rows]
  File "D:\Programs\Python\lib\site-packages\sqlalchemy\engine\result.py", line 402, in <listcomp>
    made_rows = [make_row(row) for row in rows]
TypeError: must be real number, not str
>>>

我学习 SQLAlchemy 才几天,而且我对数据库的东西也很陌生...所以我假设我做错了 某些事情 。 .. 还是 SQLAlchemy 不能很好地处理 SQLite 中的字符串数据?为什么它想要一个“实数”,其中 column 指定一个字符串,但它对 varchar 没问题?这是一个小型演示数据库,但我有一个大型数据库...我应该将所有字符串字段更改为 varchar 吗? TIA!

声明为TEXT。如果您将其声明为 STRING,它的亲和力为 NUMERIC,而不是 TEXT

看看Datatypes In SQLite, especially the last sentence in the examples

And the declared type of "STRING" has an affinity of NUMERIC, not TEXT.

这将导致 SQLAlchemy 失败。也看看