Python之csv文件从MySQL数据库导入导出学习记录

参考:点击打开链接

csv文件导入MySQL数据库


import pymysql
import csv
import codecs


def get_conn():
    conn = pymysql.connect(host='localhost', port=3306, user='root', passwd='root', db='test_csv', charset='utf8')
    return conn


def insert(cur, sql, args):
    cur.execute(sql, args)


def read_csv_to_mysql(filename):
    with codecs.open(filename=filename, mode='r', encoding='utf-8') as f:
        reader = csv.reader(f)
        head = next(reader)
        conn = get_conn()
        cur = conn.cursor()
        sql = 'insert into tb_csv values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)'
        for item in reader:
            if item[1] is None or item[1] == '':  # item[1]作为唯一键,不能为null
                continue
            args = tuple(item)
            print(args)
            insert(cur, sql=sql, args=args)

        conn.commit()
        cur.close()
        conn.close()


if __name__ == '__main__':
    read_csv_to_mysql('1.csv')

遇到的问题:

python用非root用户连接mysql,可以连接成功,但是却不能够访问和更改其中的数据库!

注:

  • 1.csv文件的表头如:
序号,合同编号,义务人,档案柜号,柜内编号,权利人,放款金额,放款日期,他项权利证编号,抵押物地址,结清出库日期,备注,地区
  • 1
  • mysql的创建tb_csv表语句
CREATE TABLE tb_csv(
    xuhao VARCHAR(20),
    htcode VARCHAR(20),
    yiwuren VARCHAR(20),
    dagh VARCHAR(20),
    gncode VARCHAR(20),
    quanliren VARCHAR(20),
    fkmoney VARCHAR(20),
    fkdata VARCHAR(20),
    qitacode VARCHAR(20),
    diyaaddr VARCHAR(100),
    jqdata VARCHAR(30),
    beizhu  VARCHAR(30),
    zone    VARCHAR(30),
    PRIMARY KEY(htcode)
)CHARSET=utf8;

这里为了省事,表中的字段都指明varchar类型


MySQL数据库写入csv文件


import pymysql
import csv
import codecs


def get_conn():
    conn = pymysql.connect(host='localhost', port=3306, user='root', passwd='root', db='test_csv', charset='utf8')
    return conn

def query_all(cur, sql, args):
    cur.execute(sql, args)
    return cur.fetchall()


def read_mysql_to_csv(filename):
    with codecs.open(filename=filename, mode='w', encoding='utf-8') as f:
        write = csv.writer(f, dialect='excel')
        conn = get_conn()
        cur = conn.cursor()
        sql = 'select * from tb_csv'
        results = query_all(cur=cur, sql=sql, args=None)
        for result in results:
            print(result)
            write.writerow(result)



if __name__ == '__main__':
    read_mysql_to_csv('2.csv')



我自己对于csv文件用python写入mysql的理解:

# coding:utf-8
# 导入mysql接口
import pymysql
# 导入csv文件处理模块
import csv
# 向打开的文件中写入unicode格式的字符串
import codecs


# 连接并返回mysql中的数据库
def get_conn():
    db = pymysql.connect(host='localhost', port=3306, user='zhang',
                        passwd='135246', db='d1', charset='utf8')
    return db


# 向数据库指针中插入一条参数
# cur.execute()sql中的占位符用args来填充
def insert(cur, sql, args):
    cur.execute(sql, args)


# 将整个csv文件插入到已连接的数据库某个表单中
def read_csv_to_mysql(filename):
    # 用with as 打开文件,结构结束后可以自动释放内存,避免遗漏f.close()使内存泄露
    with codecs.open('creditcard.csv', mode='r', encoding='utf-8') as f:
        # 将csv中的数据行拆分成迭代器
        reader = csv.reader(f)
        # 引用mysql中的数据库
        db = get_conn()
        # 得到数据库指针
        cur = db.cursor()
        # 如果db中有表单t1,删除它
        cur.execute('DROP TABLE IF EXISTS t1')
        # 建立表单t1
        cur.execute('''CREATE TABLE t1(
        time INT,
        v1 float,
        v2 float,
        v3 float,
        v4 float,
        v5 float,
        v6 float,
        v7 float,
        v8 float,
        v9 float,
        v10 float,
        v11 float,
        v12 float,
        v13 float,
        v14 float,
        v15 float,
        v16 float,
        v17 float,
        v18 float,
        v19 float,
        v20 float,
        v21 float,
        v22 float,
        v23 float,
        v24 float,
        v25 float,
        v26 float,
        v27 float,
        v28 float,
        Amount INT,
        Class BOLL)
        ''')
    # 插入表单t1的SQL语句
    # %s是每个args的占位符,如果args是tuple或list格式,那么每个arg都可以用%s代替。
   sql = '''INSERT INTO t1
    VALUES(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s
    )'''
    for item in reader:
        # 不写入csv文件的第一行
        if item[0] == 'Time':
            continue
        args = tuple(item)
        insert(cur, sql, args=args)
    db.commit()
    cur.close()
    db.close()


if __name__ == '__main__':
    read_csv_to_mysql('creditcard.csv')





猜你喜欢

转载自blog.csdn.net/zs15321583801/article/details/80989305