Skip to content

Commit f66d816

Browse files
coloravenBoris-code
authored andcommitted
mysql数据库支持设置charset
mysql数据库支持设置charset,解决老旧(测试5.0.15版本)mysql的charset不支持utf8mb4,只支持utf8的问题。
1 parent 684ef8c commit f66d816

1 file changed

Lines changed: 8 additions & 5 deletions

File tree

feapder/db/mysqldb.py

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,8 @@ def wapper(*args, **kwargs):
4141

4242
class MysqlDB:
4343
def __init__(
44-
self, ip=None, port=None, db=None, user_name=None, user_pass=None, set_session=None, **kwargs
44+
self, ip=None, port=None, db=None, user_name=None, user_pass=None, charset="utf8mb4", set_session=None,
45+
**kwargs
4546
):
4647
# 可能会改setting中的值,所以此处不能直接赋值为默认值,需要后加载赋值
4748
if not ip:
@@ -68,7 +69,7 @@ def __init__(
6869
user=user_name,
6970
passwd=user_pass,
7071
db=db,
71-
charset="utf8mb4",
72+
charset=charset,
7273
setsession=set_session,
7374
cursorclass=cursors.SSCursor,
7475
**kwargs
@@ -85,7 +86,7 @@ def __init__(
8586
user_pass: {}
8687
exception: {}
8788
""".format(
88-
ip, port, db, user_name, user_pass, e
89+
ip, port, db, user_name, user_pass, charset, e
8990
)
9091
)
9192
else:
@@ -119,7 +120,9 @@ def from_url(cls, url, **kwargs):
119120
"user_pass": url_parsed.password.strip(),
120121
"db": url_parsed.path.strip("/").strip(),
121122
}
122-
123+
# 解析 query 字符串参数,比如 ?charset=utf8
124+
query_params = dict(parse.parse_qsl(url_parsed.query))
125+
connect_params.update(query_params)
123126
connect_params.update(kwargs)
124127

125128
return cls(**connect_params)
@@ -200,7 +203,7 @@ def convert(col):
200203
if isinstance(col, (datetime.date, datetime.time)):
201204
return str(col)
202205
elif isinstance(col, str) and (
203-
col.startswith("{") or col.startswith("[")
206+
col.startswith("{") or col.startswith("[")
204207
):
205208
try:
206209
# col = self.unescape_string(col)

0 commit comments

Comments
 (0)