python操作mysql的两个方法

我想去数据库里面取出数据。
如果我有数据库下面含很多个表。

在此之前,我们给出一个读取数据库密码和用户名等基本配置的一个包:

# import the dbconfig
import sys
import json
import mysql.connector
import re

def connect(db_config):
    try:
        with open(db_config) as json_data_file:
            config = json.load(json_data_file)        
            cnx = mysql.connector.connect(**config)
            return cnx

    except IOError as e:
        print("I/O error({0}), {1}: {2}".format(e.errno, e.strerror, db_config))
        raise
    except:
        print("Unexpected error:", sys.exc_info()[0])
        raise

def connectStr(db_type, db_config):
    if db_type.lower() == 'mysql':
        port = '3306'
        charset = "?charset=utf8"
    elif db_type.lower() == 'postgresql':
        port = '5432'
        charset = ""

    try:
        with open(db_config) as json_data_file:
            config = json.load(json_data_file)
            str = db_type + "://" + config["user"]+":" + config["password"] + "@" + config["host"]+ ":" + port + "/" +config["database"] + charset
            return str

    except IOError as e:
        print("I/O error({0}), {1}: {2}".format(e.errno, e.strerror, db_config))
        raise
    except:
        print("Unexpected error:", sys.exc_info()[0])
        raise

我需要你把这个这个代码命名为dbconfig_importer.py,记住,这是我们自定义的一个库。

我们的json数据库配置格式应该如下:

{
    "user": "user",
    "password": " **********",
    "host": "********",
    "database": "*****",
    "raise_on_warnings": false
}

下面给出python操作mysql的代码,首先,你要去
pip install mysql-connector-python这个包

方法一:

import mysql.connector
import os
import sys
import csv
import codecs

sys.path.append(r"F:\lib")
#导入自定义的包
import dbconfig_importer
#这个数据库json文件自己配置就可以了,下面的json文件存储你的密码和用户名配置信息
db_config = r"F:\cfg\database_config.json"
tmp_dir = r"D:\da"

cnx = dbconfig_importer.connect(db_config)
query_cursor = cnx.cursor()

#有许多的表,我们需要定义一个函数
def csv_appdp(dp_table):
    counter=0    
    query="SELECT * FROM appdp." + dp_table          
    query_cursor.execute(query)

    appdp_csv_file = tmp_dir + '\\'+ dp_table + ".csv"
    appdp_csvfile = codecs.open(appdp_csv_file,'w', 'utf-8')    
    dp_writer = csv.writer(appdp_csvfile)

    while True:
        rows = query_cursor.fetchone()
        desc = query_cursor.description
        #定义一个空的列表来存入表头
        header=[]
        for i in desc:
            header.append(i[0])

        #将第一行的表头数据写入文件
        if counter==0:
            dp_writer.writerow(header)
        ifnot rows: break
        dp_writer.writerow(rows)
        counter += 1

csv_appdp("a")
csv_appdp("b")
csv_appdp("c")
csv_appdp("d")
csv_appdp("e")
csv_appdp("f")

query_cursor.close()
cnx.close()
appdp_csvfile.close()

方法二:
其实这个代码更加高效:

import mysql.connector
import os
import sys
import re
import csv
import pandas as pd

sys.path.append(r"F:\BQS_ETL v0.2\lib")
#这个数据库json文件自己配置就可以了
import dbconfig_importer

db_config = r"F:\BQS_ETL v0.2\cfg\database_config.json"
tmp_dir = r"D:\mili\Datamart\rawdata_csv_py\applend"

cnx = dbconfig_importer.connect(db_config)

query_cursor = cnx.cursor()

def csv_applend(lend_table):
    query="SELECT * FROM applend." + lend_table  
    #直接使用pandas读取到dataframe里面,再写入本地的文件    
    df = pd.read_sql(query,cnx)
    applend_csv_file = tmp_dir + '\\'+ lend_table + ".csv"        
    df.to_csv(applend_csv_file,encoding = "utf-8" ,index = False)

    table = [
            "a",
            "b",
            "c",
            "d",
            "e",
            "f"]

for lend_table in table:
    csv_applend(lend_table)

query_cursor.close()
cnx.close()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值