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

本文介绍了在使用SQLAlchemy连接MySQL数据库时遇到的编码问题,包括`No...MySQLdb`错误和存储数据时的编码错误。解决方案包括安装`mysqlclient`包和在创建表时指定`mysql_charset`为`utf8`。此外,还提供了预防`UnicodeEncodeError`的两种方法。通过这些步骤,可以确保数据库以UTF8编码正确创建和操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

报错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!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值