sqlalchemy utf8 quickstart

先把mysql全都配成utf8,比较坑爹的是table charset貌似没法指定默认utf-8,必须create的时候指定

[client]
default-character-set=utf8
[mysqld]
collation-server = utf8_general_ci
character-set-server = utf8

验证一下:

SHOW VARIABLES LIKE ‘character_set_%’;
SHOW VARIABLES LIKE ‘collation_%’;
# -*- coding: utf-8 -*-
import sqlalchemy
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, Integer, BigInteger,String,Text
from sqlalchemy.orm import sessionmaker

Base = declarative_base()
class Node(Base):
    __tablename__ = 'node'
    __table_args__ = {'mysql_engine':'InnoDB','mysql_charset':'utf8'}
    id = Column(Integer, primary_key=True)
    path = Column(String(255), index=True)
    name = Column(String(255))
    data = Column(Text)
    datatype = Column(String(255))

if __name__ == '__main__':
    engine = sqlalchemy.create_engine('mysql+mysqldb://root:123456@127.0.0.1:3306/dbname?charset=utf8', echo=True)

    Base.metadata.drop_all(engine)
    Base.metadata.create_all(engine) 

    Session = sessionmaker()
    Session.configure(bind=engine)
    session = Session()
    session.commit()

    n = Node()
    n.path = "/"
    n.name = "汉字"

    session.add(n)
    session.commit()

__table_args__指定了表编码,这样就可以很好支持中文了⋯ 如果有能在mysql配置里指定编码的方法请留言⋯

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>