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

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

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: from sqlalchemy import create_engine是Python中用于创建数据库连接的模块。它可以连接到各种类型的数据库,包括MySQL、PostgreSQL、SQLite等。使用该模块可以方便地进行数据库操作,如查询、插入、更新和删除等。 ### 回答2: Sqlalchemy是一个用Python语言编写的SQL工具包,常用于web应用程序中的数据处理。其中,create_engine函数是一种方法,可以创建并返回一个与数据库引擎相关的Engine对象。通过Engine对象,可以建立与数据库服务器的连接,执行SQL语句或者对数据库进行操作。 create_engine函数最常用的两个参数是“url”和“echo”。其中URL参数用于连接数据库,它是由数据库类型 + Python数据库驱动 + 主机名 + 数据库名 + 用户名 + 密码构成的连接字符串。数据库类型和Python数据库驱动是确定性参数,而其他参数则是根据部署环境和具体的数据库配置进行设置的。 假如我们要连接的数据库是MySQLPython数据库驱动是mysql-connector-python,主机名是localhost,数据库用户名为root,数据库密码为password,数据库名为test_database,则连接字符串的格式应该为:mysql+mysqlconnector://root:password@localhost/test_database 另一个参数echo可以用来开启或关闭SQL语句在控制台中的输出。设置为True时会输出SQL语句的执行结果,设置为False时则不会输出。在开发和调试过程中,可以将echo设置为True,便于排查SQL语句错误等问题。但在实际生产环境中,则需要将其禁用。 总之,create_engine函数是Sqlalchemy中非常重要的一个功能,在使用Sqlalchemy进行数据库操作时应熟悉其用法和参数设置。 ### 回答3: sqlalchemy是一个Python下处理关系型数据库的库,它包含了ORM(Object-Relational Mapping)和Python SQL工具包(SQL toolkit)等能力。ORM是一种编程技术,通过将数据库操作封装为Python对象的操作,让程序员在编写程序时更加关注于应用业务的编写而不是数据存储细节的实现。 而在使用ORM时需要先定义表的结构,这个可以用一个类来表示,这个类就代表了一张表,我们称之为模型(model)。在sqlalchemy中,我们可以通过继承sqlalchemy.orm中的base.Base来定义模型。模型中的属性代表了表中的列。 除了ORM外,sqlalchemy还提供了Python SQL工具包(SQL toolkit)的功能,方便我们直接使用sql语句操作数据库。使用SQL toolkit时,我们首先需要创建一个数据库引擎,这个引擎可以理解为是我们与数据库之间的一个桥梁,通过它我们可以向数据库发送SQL语句,同时也接收来自数据库的结果。 那么从import create_engine这一语句来看,我们可以理解为引入了sqlalchemy中的create_engine这个函数。这个函数就是用来创建一个数据库引擎的。create_engine函数可以接收一个url参数,这个url参数用来表示连接的数据库类型、连接的地址以及一些其他连接参数。通过这个函数创建的引擎可以方便我们在python中访问数据库,无论是访问本地的sqlite数据库,还是连接到云端的mysql数据库,一行代码就可以创建一个引擎,让我们的python程序与数据库之间实现数据交互。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值