python学习(四)-读取txt,写入Mysql数据库中

在python中可以直接通过open打开指定文件,通过for循环可以直接读取文件的每一行。另外django中我们可以通过model创建数据模型,但如果是已经存在的表,直接写入txt的数据,可以通过建立连接执行添加数据。

def insertData():
    try:
        conn = MySQLdb.connect(host="localhost", user="root", passwd="***", db="test", charset="utf8")
        with conn:
            cursor = conn.cursor()
            f = open('.../201501.txt')
            next(f)  # 从文件的第二行开始读起
            for line in f:
                linelist = line.split( ) # 可以根据不同的分隔符分隔,这里默认通过空格分隔。
                print linelist
                sql = "insert into webUI_salesdata() values(%s,%s,%s,%s);"
                cursor.execute(sql, linelist)
    except MySQLdb.Error, e:
        print "Mysql Error %d: %s" % (e.args[0], e.args[1])
        conn.close()

还有一种情况,txt文件中的数据是可以通过根据制表符分隔的,那么空格在这里就显无效了。这是我们可以运用pandas中的read_table 来读取。这是需要导入sqlalchemy来创建连接引擎,如果第一次了解到sqlalchemy的话,需要在终端通过pip进行安装。这里提到的sqlalchemy是由于to_sql函数支持两类mysql引擎一个是sqlalchemy,另一个是sqlliet3.在你写入库的时候,pymysql是不能用的,mysqldb也是不能用的,你只能使用sqlalchemy或者sqlliet3。
这里是一个我在没用sqlalchemy前出现的一个错误解释办法,引入的这个ORM(Object-Relational Mapping,把关系数据库的表结构映射到对象上)框架:https://stackoverflow.com/questions/42043188/pandas-to-mysql-error-valueerror-database-flavors-mysql-is-not-supported

import pandas as pd
import MySQLdb
from sqlalchemy import create_engine


def read_txt(filename):
    with open(filename):
        txt_pd = pd.read_table(filename)
        print(type(txt_pd))# 从这里可以知道是一个<class 'pandas.core.frame.DataFrame'>

        return txt_pd

if __name__ == "__main__":
    # 传入文件路径或文件名
    filename = '.../201501.txt'
    f_txt = read_txt(filename)
    engine = create_engine("mysql+mysqldb://user:pswd@localhost:3306/test?charset=utf8")
    pd.io.sql.to_sql(f_txt, 'webUI_salesdata', con=engine, if_exists='append', index=None)
    print('Done!')

(1)to_sql函数并不在pd之中,而是在io.sql之中,是sql脚本下的一个类!!!所以to_sql的最好写法就是:
pd.io.sql.to_sql(df,tablename,con=conn,if_exists=’repalce’)
(2)if_exists中:fail--如果表存在,啥也不做
replace--如果表存在,删了表,再建立一个新表,把数据插入
append--如果表存在,把数据插入,如果表不存在创建一个表
(3)index=None,index是行索引,如果表中没有的话,可以设置为none。

参考链接:http://blog.csdn.net/qq_34685317/article/details/72896306
http://blog.csdn.net/biboshouyu/article/details/54139641

你可能感兴趣的:(python)