Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Unicode、金字塔、UTF-8 MySQL表问题_Python_Mysql_Unicode_Utf 8_Sqlalchemy - Fatal编程技术网

Python Unicode、金字塔、UTF-8 MySQL表问题

Python Unicode、金字塔、UTF-8 MySQL表问题,python,mysql,unicode,utf-8,sqlalchemy,Python,Mysql,Unicode,Utf 8,Sqlalchemy,我有一个Python2金字塔web应用程序,它使用SQLAlchemy与MySQL表对话,其中所有字符串列都是UTF-8编码的。当我把数据拉出来显示时,我必须使用.decode(“UTF-8”)才能显示,否则我会得到ASCII无法解码的自然错误 我有两个问题: 是否有其他方法可以避免每次都需要.decode(“UTF-8”) 如果我想将某个内容推入数据库,并且我有一个字符串,它是s=u'str',那么当它被插入UTF-8列时,我需要对它做些什么吗 多谢各位 对于可能通过谷歌搜索找到此消息的人:

我有一个Python2金字塔web应用程序,它使用SQLAlchemy与MySQL表对话,其中所有字符串列都是UTF-8编码的。当我把数据拉出来显示时,我必须使用
.decode(“UTF-8”)
才能显示,否则我会得到ASCII无法解码的自然错误

我有两个问题:

  • 是否有其他方法可以避免每次都需要
    .decode(“UTF-8”)

  • 如果我想将某个内容推入数据库,并且我有一个字符串,它是
    s=u'str'
    ,那么当它被插入UTF-8列时,我需要对它做些什么吗

  • 多谢各位

    对于可能通过谷歌搜索找到此消息的人: 如果遇到错误,请执行以下操作:

    UnicodeDecodeError:“ascii”编解码器无法对中的字节进行解码

    一定要使用
    .encode(..)


    如果您的SQLAlchemy列的类型为而不是,SQLAlchemy将为您执行字符编码/解码(在您的示例中为to/from
    UTF-8

    请注意,列类型有一个
    convert\u unicode
    参数,可以将该参数设置为
    True
    ,但这仅适用于数据库后端不支持本机unicode的极少数情况

    正如@MartijnPieters在他的评论中提到的,您应该了解SQLAlchemy文档中的部分。也就是说,如果没有在与数据库的连接中使用以下命令显式设置字符编码:

    # set client encoding to utf8; all strings come back as unicode
    create_engine('mysql+mysqldb:///mydb?charset=utf8')
    
    (以下主要引用自SQLAlchemy文档)

    “[……]许多MySQL服务器安装默认为客户端连接的
    latin1
    编码,这会将所有数据转换为
    latin1
    ,即使在表和列上配置了
    utf8
    或其他字符集。MySQL Python接收到的charset参数也会对f启用
    使用\u unicode=1

    “手动配置
    使用\u unicode=0
    将导致MySQL python返回编码字符串:”


    是否使用编码集连接到数据库?例如
    create\u引擎('mysql+mysqldb:///mydb?charset=utf8)
    。是的,的确如此。“charset=utf8&使用unicode=1”你好,Martijn。你的评论给了我一个想法。我将use_unicode从1切换到0,然后转到sqlachemy的Unidoe而不是String列。现在它起作用了。您认为这是正确的方法吗?使用
    charset=
    set
    use\u unicode
    默认设置为1。我相信SQLAlchemy可以在
    use\u unicode
    设置为1或0时正常工作;您应该使用Unicode类型而不是字符串,并且不要使用该标志。Martijn,这就是我遇到的问题。设置为1时,它不起作用。设置为0,突然工作,我不知道为什么。;-)你好,佩德罗。我将我的列(字符串(128))转换为列(Unicode(128)),但是在查询MySQL数据库之后,获得的数据仍然是'str'类型。你认为我可能做错了什么?连接字符串-就像Martin Pieters在注释中所说的那样-utf-8字符必须在连接时设置,当与MySQL对话时。你能从SQLAlchemy元数据重新创建数据库吗?如果MySQL列是一个
    VARCHAR
    而不是一个
    NVARCHAR
    ,我认为您将具有所描述的行为。请尝试Pedro。非常感谢您的回复和时间。
    # set client encoding to utf8; all strings come back as utf8 str
    create_engine('mysql+mysqldb:///mydb?charset=utf8&use_unicode=0')