Python SQLAlchemy在提交时自动将str转换为unicode
使用SQLAlchemy将对象插入数据库时,与String()列对应的所有对象属性都会自动从转换为。有没有办法防止这种行为 代码如下:Python SQLAlchemy在提交时自动将str转换为unicode,python,unicode,sqlalchemy,Python,Unicode,Sqlalchemy,使用SQLAlchemy将对象插入数据库时,与String()列对应的所有对象属性都会自动从转换为。有没有办法防止这种行为 代码如下: from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData from sqlalchemy.orm import mapper, sessionmaker engine = create_engine('sqlite:///:memory:', echo=Fals
from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData
from sqlalchemy.orm import mapper, sessionmaker
engine = create_engine('sqlite:///:memory:', echo=False)
metadata = MetaData()
table = Table('projects', metadata,
Column('id', Integer, primary_key=True),
Column('name', String(50))
)
class Project(object):
def __init__(self, name):
self.name = name
mapper(Project, table)
metadata.create_all(engine)
session = sessionmaker(bind=engine)()
project = Project("Lorem ipsum")
print(type(project.name))
session.add(project)
session.commit()
print(type(project.name))
以下是输出:
<type 'str'>
<type 'unicode'>
我知道我可能应该只使用unicode,但这需要挖掘一些第三方代码,而我还不具备Python方面的技能:)不幸的是,您运气不好,这似乎不适用于
sqlite
。引自:
与SQLAlchemy的活性
处理的日期和时间类型
pysqlite,pysqlite的默认行为
关于Unicode,所有字符串
作为Python unicode对象返回
在所有情况下。所以即使Unicode
类型未使用,您仍将
始终从接收返回的unicode数据
结果集。这是强烈的
建议您使用
表示字符串的Unicode类型,
因为如果
传递非unicode Python字符串
从用户应用程序。混合
将非unicode对象与
返回的unicode对象可以快速恢复
制造混乱,尤其是在
将ORM用作内部数据是不正确的
始终由实际的
数据库结果字符串
实际上,有一种方法可以做到这一点。创建引擎后,只需执行这行代码:
engine.raw\u connection().connection.text\u factory=str这里有两个难看的破解:要么使用二进制而不是字符串,要么使用
engine.connection().connection.connection.text\u factory=str
非常感谢,如果你给出答案,我会接受这个解决方案:)啊,所以我只会在SQLite上遇到这个问题,很高兴知道。我确实计划在将来使用unicode:)好吧,从zifot的回答中可以明显看出,这实际上取决于底层驱动程序;但是sqlite是SA文档中提到的唯一一个