python-subprocess模块连接mysql实践

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:[email protected]: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实践)