這是從 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 嗎?蒂亞!
uj5u.com熱心網友回復:
將其宣告為TEXT. 如果您將其宣告為STRING,則它的親和力為NUMERIC,而不是TEXT
看看SQLite中的資料型別,尤其是示例中的最后一句話。
并且宣告的“STRING”型別具有 NUMERIC 的親和性,而不是 TEXT。
這將導致 SQLAlchemy 失敗。也看看這個SO問題
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/345394.html
