Python-如何创建SQL;“创建表格”;基于DF和其中数据的语句?
我将数据(从CSV或Excel)加载到Python的Panda DF中Python-如何创建SQL;“创建表格”;基于DF和其中数据的语句?,python,sql,dataframe,Python,Sql,Dataframe,我将数据(从CSV或Excel)加载到Python的Panda DF中 import pandas as pd df = pd.read_csv('table1.csv') 数据如下所示: c1,c2,c3 1,abc,1.5 2,bcd,2.53 3,agf,3.571 如何使SQLcreate table语句基于数据帧中的数据,在本例中,数据帧是: create table table1 (c1 int, c2 varchar(3), c3 float); 谢谢 您可以为正在处理的任何
import pandas as pd
df = pd.read_csv('table1.csv')
数据如下所示:
c1,c2,c3
1,abc,1.5
2,bcd,2.53
3,agf,3.571
如何使SQLcreate table语句基于数据帧中的数据,在本例中,数据帧是:
create table table1 (c1 int, c2 varchar(3), c3 float);
谢谢 您可以为正在处理的任何其他数据类型添加循环。结果应该是包含列名和数据类型的CREATETABLE语句
#Get rid of invalid characters in the column names
Col_list = []
for i in range(df.shape[1]):
Col_Name = df.columns[i].replace(" - ", "_").replace(" ", "_").replace("&", "and") # Some characters were unacceptable
Col_list.append(Col_Name)
df.columns = Col_list
#This function creates a create table statement out of my dataframe columns and data types
Text_list = []
for i in range(df.shape[1]):
Col_Name = df.columns[i]
Python = df.convert_dtypes().dtypes[i] # Most of the data types were listed as object so this reassigns them
if Python == float:
Oralce = "FLOAT"
elif Python == 'datetime64[ns]':
Oracle = 'DATE'
elif Python == 'Int64':
Oracle = "NUMBER"
else:
Oracle = "VARCHAR2(50)"
Text_list.append(Col_Name)
Text_list.append(' ')
Text_list.append(Oracle)
if i < (df.shape[1] - 1):
Text_list.append(", ")
Text_Block = ''.join(Text_list)
Text_Block
cursor = conn.cursor()
drop = """
drop TABLE tableName
"""
create = """
CREATE TABLE tableName (
{} )
""".format(Text_Block)
cursor.execute(drop)
cursor.execute(create)
cursor.execute("commit")
cursor.close()
#清除列名中的无效字符
Col_list=[]
对于范围内的i(df.shape[1]):
Col_Name=df.columns[i].replace(“-”,“”).replace(“,“”).replace(“&”,“and”)#某些字符不可接受
列列表。追加(列名称)
df.columns=列列表
#此函数使用我的dataframe列和数据类型创建CREATETABLE语句
Text_list=[]
对于范围内的i(df.shape[1]):
Col_Name=df.columns[i]
Python=df.convert_dtypes().dtypes[i]#大多数数据类型都列为对象,因此这会重新分配它们
如果Python==浮点:
Oralce=“浮动”
elif Python=='datetime64[ns]':
甲骨文=‘日期’
elif Python=='Int64':
Oracle=“编号”
其他:
Oracle=“VARCHAR2(50)”
文本列表。追加(列名称)
文本列表。附加(“”)
Text_list.append(Oracle)
如果i<(df.形状[1]-1):
文本列表。追加(“,”)
Text\u Block=''.join(Text\u列表)
文本块
游标=连接游标()
drop=”“”
删除表tableName
"""
创建“”
创建表tableName(
{} )
“”格式(文本块)
cursor.execute(drop)
cursor.execute(创建)
cursor.execute(“commit”)
cursor.close()
当您可以使用df.to_sql
并自己创建表时,为什么要生成一个语句来创建表?@coldspeed-我需要创建一个逻辑,它将遍历1000个CSV文件,并为每个CSV文件创建一个-create:1)create table语句2)针对mysql db执行create table语句,3)导入每个CSV文件数据从DF(或直接从CSV)进入一个新创建的MySql表。就像我说的。您需要生成sql语句来执行此操作的原因是什么?为什么你不能做其他人选择做的正常事情?@coldspeed-trueddf.to_sql
-除了错误之外,没有看到任何sql从中出来。