mysql操纵csv文件

先下载pymysql插件,然后再编写代码

连接数据库

# encoding=utf-8
import pymysql as db


def get_conn(**kwargs):
    '''获取mysql数据库连接'''
    return db.connect(
        host=kwargs.get('host'),
        user=kwargs.get('user'),
        passwd=kwargs.get('passwd'),
        port=kwargs.get('port',3306),
        db=kwargs.get('db')
    )


def main():
    conn = get_conn(host='127.0.0.1',
        user='root',
        passwd='123456',
        port=3307,
        db='sys')				#哪个库
    cur = conn.cursor()
    cur.execute('select count(1) from sys_config')				#哪个表名
    print(cur.fetchall())
    # print(cur.fetchone())
    # print(cur.fetchmany(2))

    cur.close()
    conn.close()

if __name__ == '__main__':
    main()

创建表

# encoding=utf-8
import pymysql as db


def get_conn(**kwargs):
    '''获取mysql数据库连接'''
    return db.connect(
        host=kwargs.get('host'),
        user=kwargs.get('user'),
        passwd=kwargs.get('passwd'),
        port=kwargs.get('port', 3306),
        db=kwargs.get('db')
    )


def execute_sql(conn, sql):
    '''执行SQL的函数'''
    cur = conn.cursor()
    with conn as cur:
        cur.execute(sql)


def create_table(conn):
    '''创建新表'''
    sql_drop_table = 'drop table if exists userinfo_user'
    sql_create_table = '''create table `userinfo_user`(
    `sno` int(11) not null,
    `sname` varchar(25) default null,
    `sage` int(11) default null,
    primary key (`sno`)) engine=innodb default charset=utf8mb4
    '''
    for sql in [sql_drop_table, sql_create_table]:
        execute_sql(conn, sql)


def insert_data(conn, sno, sname, sage):
    insert_format = "insert into userinfo_user values({0},'{1}',{2})"
    sql = insert_format.format(sno, sname, sage)
    execute_sql(conn,sql)


def main():
    conn = get_conn(host='127.0.0.1',
                    user='root',
                    passwd='123456',
                    port=3307,
                    db='userinfo')
    cur = conn.cursor()
    cur.execute('select * from userinfo_user')
    print(cur.fetchall(),end=' ')
    # print(cur.fetchone())
    # print(cur.fetchmany(2))

    create_table(conn)

    insert_data(conn,100,'张三',18)
    insert_data(conn,101,'李四',19)

    cur.close()
    conn.close()


if __name__ == '__main__':
    main()
((100, '张三', 18), (101, '李四', 19)) 

查看数据库

在这里插入图片描述

MySQL操作csv文件

查询数据

# encoding=utf-8
import pymysql as db


def get_conn(**kwargs):
    '''获取mysql数据库连接'''
    return db.connect(
        host=kwargs.get('host'),
        user=kwargs.get('user'),
        passwd=kwargs.get('passwd'),
        port=kwargs.get('port', 3306),
        db=kwargs.get('db')
    )


def execute_sql(conn, sql):
    '''执行SQL的函数'''
    cur = conn.cursor()
    with conn as cur:
        cur.execute(sql)


def create_table(conn):
    '''创建新表'''
    sql_drop_table = 'drop table if exists userinfo_user'
    sql_create_table = '''create table `userinfo_user`(
    `sno` int(11) not null,
    `sname` varchar(25) default null,
    `sage` int(11) default null,
    primary key (`sno`)) engine=innodb default charset=utf8mb4
    '''
    for sql in [sql_drop_table, sql_create_table]:
        execute_sql(conn, sql)


def insert_data(conn, sno, sname, sage):
    insert_format = "insert into userinfo_user values({0},'{1}',{2})"
    sql = insert_format.format(sno, sname, sage)
    execute_sql(conn,sql)


def main():
    conn = get_conn(host='127.0.0.1',
                    user='root',
                    passwd='123456',
                    port=3307,
                    db='userinfo')
    try:
        # create_table(conn)
        # insert_data(conn, 100, '张三', 18)
        # insert_data(conn, 101, '李四', 19)

        with conn as cur:
            cur.execute('select * from userinfo_user')
            rows = cur.fetchall()
            for row in rows:
                print(row)
    finally:
        if conn:
            conn.close()


if __name__ == '__main__':
    main()
(100, '张三', 18)
(101, '李四', 19)
# encoding=utf-8
import pymysql as db
from contextlib import contextmanager


@contextmanager
def get_conn(**kwargs):
    '''获取mysql数据库连接'''
    conn = db.connect(
        host=kwargs.get('host'),
        user=kwargs.get('user'),
        passwd=kwargs.get('passwd'),
        port=kwargs.get('port', 3306),
        db=kwargs.get('db'))
    try:
        yield conn
    finally:
        if conn:
            conn.close()


def execute_sql(conn, sql):
    '''执行SQL的函数'''
    # cur = conn.cursor()
    with conn as cur:
        cur.execute(sql)


def create_table(conn):
    '''创建新表'''
    sql_drop_table = 'drop table if exists userinfo_user'
    sql_create_table = '''create table `userinfo_user`(
    `sno` int(11) not null,
    `sname` varchar(25) default null,
    `sage` int(11) default null,
    primary key (`sno`)) engine=innodb default charset=utf8mb4
    '''
    for sql in [sql_drop_table, sql_create_table]:
        execute_sql(conn, sql)


def insert_data(conn, sno, sname, sage):
    insert_format = "insert into student values({0},'{1}',{2})"
    sql = insert_format.format(sno, sname, sage)
    execute_sql(conn, sql)


def main():
    conn_args = dict(host='127.0.0.1',
                     user='root',
                     passwd='123456',
                     port=3307,
                     db='userinfo')

    with get_conn(**conn_args) as conn:
        with conn as cur:
            cur.execute('select * from userinfo_user')
            rows = cur.fetchall()
            for row in rows:
                print(row)


if __name__ == '__main__':
    main()
(100, '张三', 18)
(101, '李四', 19)

CSV

读取CSV文件

写一个stocks.scv文件,里面内容为

Symbol, Price, Date, Time, Change, Volume
'AA', 39.48, '6/11/2007', '9:36am', -0.18, 181800
'AIG', 71.38, '6/11/2007', '9:36am', -0.15, 195500
'AXP', 62.58, '6/11/2007', '9:36am', -0.46, 935000
'BA', 98.31, '6/11/2007', '9:36am', +0.12, 104800
'C', 53.08, '6/11/2007', '9:36am', -0.25, 360900
'CAT', 78.29, '6/11/2007', '9:36am', -0.23, 225400

编写代码

# coding=utf-8
import csv

with open('stocks.csv') as f:
    f_csv = csv.reader(f)
    #取出csv文件头:表头
    headers = next(f_csv)
    #遍历表头意外的行
    for row in f_csv:
        print(row)
["'AA'", ' 39.48', " '6/11/2007'", " '9:36am'", ' -0.18', ' 181800']
["'AIG'", ' 71.38', " '6/11/2007'", " '9:36am'", ' -0.15', ' 195500']
["'AXP'", ' 62.58', " '6/11/2007'", " '9:36am'", ' -0.46', ' 935000']
["'BA'", ' 98.31', " '6/11/2007'", " '9:36am'", ' +0.12', ' 104800']
["'C'", ' 53.08', " '6/11/2007'", " '9:36am'", ' -0.25', ' 360900']
["'CAT'", ' 78.29', " '6/11/2007'", " '9:36am'", ' -0.23', ' 225400']
遍历文件
print(exampleData[5][5])
 360900
# coding=utf-8
import csv
from collections import namedtuple

with open('stocks.csv') as f:
    f_csv = csv.reader(f)
    #取出csv文件头:表头
    headers = next(f_csv)
    #遍历表头意外的行
    Row = namedtuple("Row",'headers')
    for r in f_csv:
        row = Row(r)
        print(row)
Row(headers=["'AA'", ' 39.48', " '6/11/2007'", " '9:36am'", ' -0.18', ' 181800'])
Row(headers=["'AIG'", ' 71.38', " '6/11/2007'", " '9:36am'", ' -0.15', ' 195500'])
Row(headers=["'AXP'", ' 62.58', " '6/11/2007'", " '9:36am'", ' -0.46', ' 935000'])
Row(headers=["'BA'", ' 98.31', " '6/11/2007'", " '9:36am'", ' +0.12', ' 104800'])
Row(headers=["'C'", ' 53.08', " '6/11/2007'", " '9:36am'", ' -0.25', ' 360900'])
Row(headers=["'CAT'", ' 78.29', " '6/11/2007'", " '9:36am'", ' -0.23', ' 225400'])

在for循环中,从Reader对象读取数据

import csv
exampleFile = open('stocks.csv')
exampleReader = csv.reader(exampleFile)
for row in exampleReader:
    print('Row #' + str(exampleReader.line_num) + ' ' + str(row))
Row #1 ['Symbol', ' Price', ' Date', ' Time', ' Change', ' Volume']
Row #2 ["'AA'", ' 39.48', " '6/11/2007'", " '9:36am'", ' -0.18', ' 181800']
Row #3 ["'AIG'", ' 71.38', " '6/11/2007'", " '9:36am'", ' -0.15', ' 195500']
Row #4 ["'AXP'", ' 62.58', " '6/11/2007'", " '9:36am'", ' -0.46', ' 935000']
Row #5 ["'BA'", ' 98.31', " '6/11/2007'", " '9:36am'", ' +0.12', ' 104800']
Row #6 ["'C'", ' 53.08', " '6/11/2007'", " '9:36am'", ' -0.25', ' 360900']
Row #7 ["'CAT'", ' 78.29', " '6/11/2007'", " '9:36am'", ' -0.23', ' 225400']

Writer对象

写入csv文件

import csvoutputFile = open('output.csv','w',newline='')outputWriter = csv.writer(outputFile)outputWriter.writerow(['spam','eggs','bacon','ham'])outputWriter.writerow(['Hello,world','eggs','bacon','ham'])outputWriter.writerow([1,2,3.141592,4])outputFile.close()

会生成新的ooutput.csv文件

spam,eggs,bacon,ham
"Hello,world",eggs,bacon,ham
1,2,3.141592,4

delimiter和lineterminator关键字参数

import csv
csvFile = open('example.csv','w',newline='')
csvWriter = csv.writer(csvFile,delimiter='\t',lineterminator='\n\n')
csvWriter.writerow(['apples','oranges','grapes'])
csvWriter.writerow(['eggs','bacon','ham'])
csvWriter.writerow(['spam','spam','spam','spam','spam','spam'])
csvFile.close()

会生成一个新的example.csv文件

apples	oranges	grapes

eggs	bacon	ham

spam	spam	spam	spam	spam	spam

向MYSQL中写入CSV文件

先新建data.csv文件

Symbol,Price,Date
AA, 39.48, 6/11/2007
AIG, 71.38, 6/11/2007
AXP, 62.58, 6/11/2007
BA, 98.31, 6/11/2007
C, 53.08, 6/11/2007
CAT, 78.29, 6/11/2007

编写代码

# coding=utf-8
import pymysql as db
import csv
from collections import namedtuple
from contextlib import contextmanager


@contextmanager
def get_conn(**kwargs):
    '''获取mysql数据库连接'''
    conn = db.connect(
        host=kwargs.get('host'),
        user=kwargs.get('user'),
        passwd=kwargs.get('passwd'),
        port=kwargs.get('port', 3306),
        db=kwargs.get('db'))
    try:
        yield conn
    finally:
        if conn:
            conn.close()


def get_data(filename):
    '''读取csv文件'''
    with open(filename) as f:
        f_csv = csv.reader(f)
        # 取出csv文件头:表头
        headers = next(f_csv)
        # 遍历表头以外的所有行
        Row = namedtuple("Row", ['Symbol', 'Price', 'Date'])
        for r in f_csv:
            yield Row(*r)


def execute_sql(conn, sql):
    '''执行SQL的函数'''
    with conn as cur:
        cur.execute(sql)


def create_table(conn):
    '''创建新表'''
    sql_drop_table = 'drop table if exists data_csv'
    sql_create_table = '''create table `data_csv`(
    `Symbol` varchar (20) not null,
    `Price` decimal not null,
    `Date` varchar (20)  default null) engine=innodb default charset=utf8mb4
    '''
    for sql in [sql_drop_table, sql_create_table]:
        execute_sql(conn, sql)


def insert_data(conn, symbol, price, date):
    insert_format = "insert into data_csv values('{0}','{1}','{2}')"
    sql = insert_format.format(symbol, price, date)
    execute_sql(conn, sql)


def main():
    conn_args = dict(host='127.0.0.1',
                     user='root',
                     passwd='123456',
                     port=3307,
                     db='userinfo')

    with get_conn(**conn_args) as conn:
        with conn as cur:
            # create_table(conn)
            for t in get_data('data.csv'):
                insert_data(conn, t.Symbol, t.Price, t.Date)


if __name__ == '__main__':
    main()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值