使用SQLAlchemy创建数据表所遇到问题

  • Post author:
  • Post category:其他

报错No … MySQLdb

当使用下面这行代码链接数据库,会发生没有mysqldb报错

engine = create_engine('mysql://数据库账号:数据库密码@数据库地址:3306/数据库名称')

解决:安装mysqlclient包,因为python3不支持mysqldb,你可能会看到使用pymysql包,但感觉没这个方便。
安装代码

pip install mysqlclient

存储数据到数据库报错“\xE5\x8C\x97\xE4\xBA\xAC”

编码格式错误,默认为latin1,实际要改为utf8.在设计表的时候加入如下__table_args__代码块。

class Medicine(Base):
    # 表的名字:
    __tablename__ = 'spider'

    # 表的结构:
    id = Column(Integer(), primary_key=True,autoincrement=True)
    name = Column(String(256))

    __table_args__ = {
        "mysql_charset": "utf8"
    }

两个问题完美解决。

运行之后还会报如下错误

UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-2: character maps to <undefined>

在程序开始添加如下代码:

import pymysql
pymysql.install_as_MySQLdb()

或者说在engine添加的时候后面加一个字段,如下

engine = create_engine('mysql://数据库账号:数据库密码@数据库地址:3306/数据库名称?charset=utf8')

两种都行

完整数据库链接代码模板:

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column,Integer,ForeignKey,String


db_connect_string='mysql://账号:密码@ip:3306/名称?charset=utf8'
# echo可以直接看到创建数据库的时候发送的代码
engine = create_engine(db_connect_string,echo=True)
Base = declarative_base(engine)

class Admin(Base):
    __tablename__='表名称'
    admin_id=Column(Integer,primary_key=True)
    name=Column(String(10))
    # 更改字符编码格式
    __table_args__ = {
        "mysql_charset": "utf8"
    }

Base.metadata.create_all()

最后发现,这一切的编码格式错误问题是因为创建数据库的时候编码格式没有设置为utf8!!!


版权声明:本文为shashouleilei原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。