900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > mysql数据库data没有新创建_如何从pandas datafram在MySQL数据库中创建新表

mysql数据库data没有新创建_如何从pandas datafram在MySQL数据库中创建新表

时间:2019-04-13 02:16:57

相关推荐

mysql数据库data没有新创建_如何从pandas datafram在MySQL数据库中创建新表

我采用了上面aws_学徒建议的方法,即首先创建表,然后将数据写入表中。在

下面的代码首先从df(自动定义表名和数据类型)自动生成一个mysql表,然后将df数据写入该表。在

我不得不克服一些小问题,比如:未命名的csv列,确定mysql表中每个字段的正确数据类型。在

我肯定还有很多其他的(更好的?)方法,但这似乎有效。在import pandas as pd

from sqlalchemy import create_engine

infile = r'path/to/file.csv'

db = 'a001_db'

db_tbl_name = 'a001_rd004_db004'

'''

Load a csv file into a dataframe; if csv does not have headers, use the headers arg to create a list of headers; rename unnamed columns to conform to mysql column requirements

'''

def csv_to_df(infile, headers = []):

if len(headers) == 0:

df = pd.read_csv(infile)

else:

df = pd.read_csv(infile, header = None)

df.columns = headers

for r in range(10):

try:

df.rename( columns={'Unnamed: {0}'.format(r):'Unnamed{0}'.format(r)}, inplace=True )

except:

pass

return df

'''

Create a mapping of df dtypes to mysql data types (not perfect, but close enough)

'''

def dtype_mapping():

return {'object' : 'TEXT',

'int64' : 'INT',

'float64' : 'FLOAT',

'datetime64' : 'DATETIME',

'bool' : 'TINYINT',

'category' : 'TEXT',

'timedelta[ns]' : 'TEXT'}

'''

Create a sqlalchemy engine

'''

def mysql_engine(user = 'root', password = 'abc', host = '127.0.0.1', port = '3306', database = 'a001_db'):

engine = create_engine("mysql://{0}:{1}@{2}:{3}/{4}?charset=utf8".format(user, password, host, port, database))

return engine

'''

Create a mysql connection from sqlalchemy engine

'''

def mysql_conn(engine):

conn = engine.raw_connection()

return conn

'''

Create sql input for table names and types

'''

def gen_tbl_cols_sql(df):

dmap = dtype_mapping()

sql = "pi_db_uid INT AUTO_INCREMENT PRIMARY KEY"

df1 = df.rename(columns = {"" : "nocolname"})

hdrs = df1.dtypes.index

hdrs_list = [(hdr, str(df1[hdr].dtype)) for hdr in hdrs]

for i, hl in enumerate(hdrs_list):

sql += " ,{0} {1}".format(hl[0], dmap[hl[1]])

return sql

'''

Create a mysql table from a df

'''

def create_mysql_tbl_schema(df, conn, db, tbl_name):

tbl_cols_sql = gen_tbl_cols_sql(df)

sql = "USE {0}; CREATE TABLE {1} ({2})".format(db, tbl_name, tbl_cols_sql)

cur = conn.cursor()

cur.execute(sql)

cur.close()

mit()

'''

Write df data to newly create mysql table

'''

def df_to_mysql(df, engine, tbl_name):

df.to_sql(tbl_name, engine, if_exists='replace')

df = csv_to_df(infile)

create_mysql_tbl_schema(df, mysql_conn(mysql_engine()), db, db_tbl_name)

df_to_mysql(df, mysql_engine(), db_tbl_name)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。