我创建了连接到
sqlalchemy
数据库的MySQL引擎。我希望将
charset
指定为
create_engine
参数。
如果我使用
create_engine
liKe,那么:
create_engine('mysql+mysqldb://pd:pd@localhost/pd?charset=utf8')
那一切都很好。但是,当我像那样使用它时:
create_engine('mysql+mysqldb://pd:pd@localhost/pd', charset='utf8')
然后,我得到以下错误:
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
?
发布于 2017-05-21 10:08:47
可以使用
sqlalchemy.engine.url
.
URL
类。
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'})
甚至更好
DB = {
'drivername': 'mysql',
'host': '127.0.0.1',
'port': '3306',
'username': os.environ['DBUNAME'],