Как импортировать данные из файла CSV в мою базу данных, используя pandas и pyodbc? - PullRequest
0 голосов
/ 11 октября 2018

импорт пакета

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 голосов
/ 12 октября 2018

«CSV» является аббревиатурой от «значений, разделенных запятыми».К сожалению, в настоящее время термин «CSV» применяется практически к любому текстовому файлу, содержащему данные, даже к тем, которые не используют запятые в качестве разделителя полей.

Тем не менее, многие утилиты используют разделитель запятых, если не указано иное.pandas read_csv один из методов:

sep: str, default ','

То есть для текстового файла, содержащего

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)
...