• sqlalchemy的ipv6方式访问


    问题:使用sqlalchemy访问mysql数据库时候,如果传入ipv6地址报错

    使用sqlalchemy访问mysql数据库时候,一直使用的ipv4地址,当url中ip换成ipv6地址时候,出现报错

    ValueError: invalid literal for int() with base 10: 'dc92:ff:1:1:215:86:187:3307'
     

    定位

    跟着如下报错信息一层一层找到sqlalchemy/engine/url.py的line-771行函数_parse_rfc1738_args
     
    此时发现这是解析url的函数,其中ipv4和ipv6的解析格式不一致
     
    def _parse_rfc1738_args(name):
        pattern = re.compile(
            r"""
                (?P<name>[\w\+]+)://
                (?:
                    (?P<username>[^:/]*)
                    (?::(?P<password>[^@]*))?
                @)?
                (?:
                    (?:
                        \[(?P<ipv6host>[^/\?]+)\] |
                        (?P<ipv4host>[^/:\?]+)
                    )?
                    (?::(?P<port>[^/\?]*))?
                )?
                (?:/(?P<database>[^\?]*))?
                (?:\?(?P<query>.*))?
                """,
            re.X,
        )
    

      

    从代码段可以看出,ipv6的解析时候,ip是加了中括号的。于是恍然大悟,url的格式不能照搬ipv4。

    把ipv6的url修改后问题就解决了。

    总结

    slqchemy中,ipv4的url格式/ipv6的url格式正确如下:

    ipv4:    url = "mysql+pymysql://username:password@ip:port/db_name"

    ipv6:    url = "mysql+pymysql://username:password@ [ ip ] :port/db_name"

     
     
     
     
    大道至简
  • 相关阅读:
    别样JAVA学习(六)继承下(2.3)异常下
    Reverse Integer
    Win10易升-在线升级工具
    yum实现仅仅下载不安装包
    redis对key的基本操作
    Win一键查看用户密码
    Linux常用基本命令
    mysql用户管理
    Linux下grub.cnf详解
    图片MassiGra045 简体中文|MG
  • 原文地址:https://www.cnblogs.com/liurong07/p/15544964.html
Copyright © 2020-2023  润新知