python - 为什么在刷新数据库更改后 SQLAlchemy 将字符串更改为整数?
问题描述
我已经定义了一个 SQLAlchemy Table 对象,使其具有 type 的列属性Text
。然后我创建表对象的一个实例并将列属性设置为一串数字。该属性肯定以字符串开头,但是在flush
使用数据库会话调用之后,该属性将更改为整数。当属性应该是文本字符串时,为什么 SQLAlchemy 会将此属性更改为整数?
这适用于 Python 3.6.7、SQLAlchemy 1.3.6 和 MySQL 8.0.15。
这是表定义:
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, Text
Base = declarative_base()
class Entry(Base):
__tablename__ = 'Entry'
id = Column(Integer, primary_key=True)
value = Column(Text, nullable=True)
以下是表类的使用方式:
from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
database_uri = "SOME_MYSQL_URI"
db_engine = create_engine(database_uri, pool_recycle=3600)
session = scoped_session(
sessionmaker(
autocommit=True,
autoflush=False,
bind=db_engine
)
)
entry = Entry(value='0123')
session.add(entry)
session.flush()
您可以entry.value
在终端中调用 flush 方法后看到更改:
>>> entry.value
'0123'
>>> type(entry.value)
<class 'str'>
>>> session.flush()
>>> entry.value
123
>>> type(entry.value)
<class 'int'>
需要注意的是,数据库在表中将该值保存为“0123”。似乎是 python 解释器将值重新转换为整数。此外,具有非数字字符的字符串似乎不受影响。
解决方案
推荐阅读
- sql - Sqlite 中的 IF ELSE 解决方法
- python - 在一个笔记本中使用 tensorflow 和 numpy 时:内核似乎已经死了。它会自动重启
- discord - Discord API 将消息从一个 webhook 转发到另一个 webhook
- cassandra - Cassandra Datastax 驱动程序 - Guava - CodecRegistry.findCodec NullPointerException
- r - 如何将闪亮的应用图像下载到 Rmarkdown pdf 中?
- listview - 如何使用标题和 ListTile 制作列表视图?
- python - Python 3.7 和 3.4 GPS3 模块上的 WinError10057
- python - if else 语句中使用的递归
- android - Android Material TextInputLayout 错误信息显示在 Material TextInputEditText child 后面
- python - 列表的条件位置比较基于