如何使用pandas和pyodbc将CSV文件数据导入到我的数据库中?

时间:2018-10-11 07:33:15

标签: python pandas pyodbc

导入包

import pandas as pd
import pyodbc

建立连接

conn = pyodbc.connect("Driver={ODBC Driver 17 for SQL Server}; Server=servername; Database=databasename; Trusted_Connection=Yes")
cur = conn.cursor()

保存用于构建表的SQL代码

string = "CREATE TABLE TESTDATA(Log int PRIMARY KEY, User varchar(15))"

tablename = re.search("CREATE TABLE ([a-z A-Z]+)\(",string)
if tablename:
    tablename = tablename.group(1)

如果表名不在sql表列表中,则构建表

if not cur.table(table=tablename).fetchone():
    cur.execute(string)
    conn.commit()

读取data.csv文件

df = pd.read_csv(r"data.csv")
df.to_sql(name="TESTDATA", con=conn, index=True, index_label="id")

文件示例

data.csv:

Log  User
1    Jack
2    Jackie
3    Jacky

我希望将这些数据导入SQL数据库,但是失败

我不确定哪里出了问题,但它成功地建立了表,并且无法将csv文件读取到表中

1 个答案:

答案 0 :(得分:2)

“ CSV”是“逗号分隔值”的首字母缩写。不幸的是,如今,“ CSV”一词几乎适用于所有包含数据的文本文件,甚至包括那些不使用逗号作为字段分隔符的文本文件。

不过,除非另有说明,否则许多实用程序都采用逗号分隔符。熊猫read_csv方法是其中一种:

  

sep:str,默认为“,”

对于包含以下内容的文本文件

Log  User
1    Jack
2    Jackie
3    Jacky

代码

df = pd.read_csv(r"C:\Users\Gord\Desktop\data.txt")
print(df.to_dict())

产生

{'Log  User': {0: '1    Jack', 1: '2    Jackie', 2: '3    Jacky'}}

请注意,只有一列名为'Log User'的列,每一行包含文本文件中的整行。

如果要正确解析该文件,则需要使用

df = pd.read_csv(r"C:\Users\Gord\Desktop\data.txt", delim_whitespace=True)