Python SQLAlchemy在提交时自动将str转换为unicode

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

使用SQLAlchemy将对象插入数据库时,与String()列对应的所有对象属性都会自动从转换为。有没有办法防止这种行为

代码如下:

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文档中提到的唯一一个