sqlalmechy 连接数据库 密码中有@符号

1,105 阅读1分钟

sqlalmechy 数据库连接的问题

使用orm 框架sqlalmechy的过程中,也出现了一个神坑 sqlalmechy 版本是1.4.29

# -*- coding: utf-8 -*-
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from urllib import parse


class Connection(object):
    def __init__(self, host, port, user, password, database):
        self.host = host
        self.port = port
        self.user = user
        self.password = password
        self.database = database
        self._engine = create_engine(f"mysql+pymysql://{self.user}:{self.password}@{self.host}:\
                {self.port}/{self.database}?charset=utf8mb4", echo=False)

    def connect(self):
        self.DBSession = sessionmaker(bind=self._engine)
        return self.DBSession

    @property
    def engine(self):
        return self._engine

如果password 中有“@”符号就连不上数据库了

解决方法1

降低sqlalmechy版本,目前只测试了1.4.7版本

解决方法2

修改代码

# -*- coding: utf-8 -*-
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from urllib import parse


class Connection(object):
    def __init__(self, host, port, user, password, database):
        self.host = host
        self.port = port
        self.user = user
        self.password = parse.quote_plus(password)
        self.database = database
        self._engine = create_engine(f"mysql+pymysql://{self.user}:{self.password}@{self.host}:\
                {self.port}/{self.database}?charset=utf8mb4", echo=False)

    def connect(self):
        self.DBSession = sessionmaker(bind=self._engine)
        return self.DBSession

    @property
    def engine(self):
        return self._engine

用urllib给"@"转义转成"%4"