我创建了连接到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'],
'password': os.environ['DBPASS'],
'database': os.environ['DBNAME'],
'query': {'charset':'utf8'}
}
engine = create_engine(URL(**DB))
根据文档,URL
类具有以下参数
https://stackoverflow.com/questions/15784357
复制相似问题