python-subprocess模塊連接mysql實(shí)踐

subprocess模塊call和run方法測(cè)試,運(yùn)行環(huán)境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,  # 超過連接池大小外最多創(chuàng)建的連接,為0表示超過5個(gè)連接后,其他連接請(qǐng)求會(huì)阻塞 (默認(rèn)為10)
                       pool_size=5,  # 連接池大?。J(rèn)為5)
                       pool_timeout=30,  # 連接線程池中,沒有連接時(shí)最多等待的時(shí)間,不設(shè)置無連接時(shí)直接報(bào)錯(cuò) (默認(rèn)為30)
                       pool_recycle=-1,  # 多久之后對(duì)線程池中的線程進(jìn)行一次連接的回收(重置) (默認(rèn)為-1)
                       encoding='utf-8',
                       echo=False  # 打印SQL語句
                       )


def check_data(source_file_no):
    # 注意拼接出來的空格要帶上
   # call和run的第一個(gè)參數(shù)均不能多字符串
    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("數(shù)據(jù)結(jié)果集為空")
        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("結(jié)果中未查到該數(shù)據(jù)庫(kù)")
        return True
    return False


if __name__ == '__main__':
    # 查詢傳入數(shù)據(jù)庫(kù)名是否已創(chuàng)建
    check_data("de_mo")
    #   print("".join(["de"]+"de_mo".split("_")[1:]))
    a = os.path.join('/usr/local/bin', 'data')  # 自動(dòng)補(bǔ)全兩個(gè)路徑接口處的 /
    a1 = '/usr/local/bin' + 'data'
    print(a + "大爺" + a1)
    ABSPATH = os.path.dirname(os.path.abspath(__file__))
    print("當(dāng)前目錄為" + os.getcwd())
    sys.path.append(os.path.join(ABSPATH, ".."))  # 當(dāng)前目錄 cd .. 該功能可以直接導(dǎo)入拼接后目錄的包
    print(os.path.abspath(__file__))
    print(ABSPATH)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容