首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >sqlalchemy,将MySQL字符集设置为`create_engine`参数

sqlalchemy,将MySQL字符集设置为`create_engine`参数
EN

Stack Overflow用户
提问于 2013-04-03 10:02:35
回答 1查看 8.5K关注 0票数 4

我创建了连接到sqlalchemy数据库的MySQL引擎。我希望将charset指定为create_engine参数。

如果我使用create_engine liKe,那么:

代码语言:javascript
运行
复制
create_engine('mysql+mysqldb://pd:pd@localhost/pd?charset=utf8') 

那一切都很好。但是,当我像那样使用它时:

代码语言:javascript
运行
复制
create_engine('mysql+mysqldb://pd:pd@localhost/pd', charset='utf8') 

然后,我得到以下错误:

代码语言:javascript
运行
复制
TypeError: Invalid argument(s) 'charset' sent to create_engine(), using
    configuration MySQLDialect_mysqldb/QueuePool/Engine. Please check that
    the keyword arguments are appropriate for this combination of components.

根据文献资料的说法,这种使用应该是可能的:

URL的字符串形式是dialect+driver://user:password@host/dbname?key=value....。 **kwargs需要多种选择,并将其路由到适当的组件上。参数可能特定于引擎、基本方言以及池。特定方言也接受该方言特有的关键字参数。在这里,我们描述了大多数create_engine()使用中常见的参数。

为什么我不能单独指定charset

EN

回答 1

Stack Overflow用户

发布于 2017-05-21 10:08:47

可以使用sqlalchemy.engine.url.URL类。

代码语言:javascript
运行
复制
import os
from sqlalchemy import create_engine
from sqlalchemy.engine.url import URL

DB = {
    'drivername': 'mysql',
    'host': '127.0.0.1',
    'port': '3306',
    'username': os.environ['DBUNAME'],
    'password': os.environ['DBPASS'],
    'database': os.environ['DBNAME']
}

engine = create_engine(URL(**DB), connect_args={'charset':'utf8'})

甚至更好

代码语言:javascript
运行
复制
DB = {
    'drivername': 'mysql',
    'host': '127.0.0.1',
    'port': '3306',
    'username': os.environ['DBUNAME'],
    'password': os.environ['DBPASS'],
    'database': os.environ['DBNAME'],
    'query': {'charset':'utf8'}
}

engine = create_engine(URL(**DB))

根据文档URL类具有以下参数

  • 数据库后端的名称。这个名称将对应于sqlalchemy/数据库中的模块或第三方插件。
  • 用户名-用户名。
  • 密码-数据库密码。
  • 主机-主机名。
  • 端口-端口号。
  • 数据库-数据库名称。
  • 查询-连接时要传递给方言和/或DBAPI的选项字典。
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15784357

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档