美文网首页
python-subprocess模块连接mysql实践

python-subprocess模块连接mysql实践

作者: 堂哥000 | 来源:发表于2022-01-07 15:47 被阅读0次

    subprocess模块call和run方法测试,运行环境windows

    # -*- coding: utf-8 -*-
    
    import subprocess
    import os
    import pandas as pd
    from sqlalchemy import create_engine
    import sys
    
    engine = create_engine("mysql+pymysql://root:root@10.1.60.110:3306/datax?charset=utf8mb4",
                           max_overflow=0,  # 超过连接池大小外最多创建的连接,为0表示超过5个连接后,其他连接请求会阻塞 (默认为10)
                           pool_size=5,  # 连接池大小(默认为5)
                           pool_timeout=30,  # 连接线程池中,没有连接时最多等待的时间,不设置无连接时直接报错 (默认为30)
                           pool_recycle=-1,  # 多久之后对线程池中的线程进行一次连接的回收(重置) (默认为-1)
                           encoding='utf-8',
                           echo=False  # 打印SQL语句
                           )
    
    
    def check_data(source_file_no):
        # 注意拼接出来的空格要带上
       # call和run的第一个参数均不能多字符串
        sql = ("\"show", " databases\"")
        sql2 = "show databases"
        # all_data = engine.execute(sql)
        cmd = ("mysql ", "-uroot ", " -proot ", "-e ")
        cmd2 = "mysql -uroot -proot -e "
        subprocess.call([cmd, sql])
        # 两种写法
        # result = subprocess.run(["mysql", "-uroot", "-proot", "-e", "show databases"] , shell=True, capture_output=False)
        result = subprocess.run([cmd, sql], shell=True, capture_output=True)
        if result.returncode != 0:
            print("数据结果集为空")
            return True
        mysql_database_info = pd.DataFrame(
            [i for i in result.stdout.decode(encoding='UTF_8', errors='strict').split('\r\n') if i.strip() != ''],
            columns=['database_name'])
        if "".join(["de"] + source_file_no.split("_")[1:]) not in mysql_database_info['database_name'].values:
            print("结果中未查到该数据库")
            return True
        return False
    
    
    if __name__ == '__main__':
        # 查询传入数据库名是否已创建
        check_data("de_mo")
        #   print("".join(["de"]+"de_mo".split("_")[1:]))
        a = os.path.join('/usr/local/bin', 'data')  # 自动补全两个路径接口处的 /
        a1 = '/usr/local/bin' + 'data'
        print(a + "大爷" + a1)
        ABSPATH = os.path.dirname(os.path.abspath(__file__))
        print("当前目录为" + os.getcwd())
        sys.path.append(os.path.join(ABSPATH, ".."))  # 当前目录 cd .. 该功能可以直接导入拼接后目录的包
        print(os.path.abspath(__file__))
        print(ABSPATH)
    
    

    相关文章

      网友评论

          本文标题:python-subprocess模块连接mysql实践

          本文链接:https://www.haomeiwen.com/subject/xqbjcrtx.html