我创建了连接到 sqlalchemy 数据库的MySQL引擎。我希望将 charset 指定为 create_engine 参数。
sqlalchemy
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 类。
sqlalchemy.engine.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'],