Создать временную ТАБЛИЦУ с помощью файла csv

В python я хотел бы:

  1. Получить от пользователя имя файла в CSV-файле
  2. преобразовать csv во временную таблицу
  3. запускать пользовательские запросы к центральной базе данных для добавления данных в таблицу
  4. вывод в новый CSV для использования пользователем.

Я могу справиться с большинством этих шагов, есть лишь несколько вещей, которых я не понимаю.

Возможно ли это с помощью скрипта sqlite? Сможет ли класс python sqlite выполнить этот скрипт?

conn = sqlite3.connect(central_database, check_same_thread=False)
cur = self.conn.cursor()

#user defines csv file and other params via http form -> script

cur.execute(script)
csv = cur.fetchall()

Я мог думать об этом неправильно. Итак, вот моя установка:

  1. Python 3.6.3
  2. flask / jinja2 (с поддержкой javascript)
  3. sqlite 3.22.0

Если это сценарий, который будет запускать пользователь, я бы порекомендовал создать вашу временную таблицу на Python с помощью Pandas, внести в нее изменения и затем записать это обратно в CSV. Это вариант?

Engineero 20.04.2018 22:23

Да. это должно быть легко в питоне. Вы можете использовать модуль csv для чтения / записи csv, и что было бы с sqlite3, если бы вы не могли его запросить. Кроме .... это база данных sqlite? Если нет, используйте другую библиотеку python sql. Это слишком широко для этого сайта, поэтому мы закроем его, но продолжим.

tdelaney 20.04.2018 22:24

pandas в порядке, но csv может быть проще. Так что уже препираемся!

tdelaney 20.04.2018 22:25

Предполагая, что вы не можете использовать pandas, вы можете создать таблицу и вставить данные csv в временную таблицу. После того, как он вставлен, запустите запросы в своей таблице. Получите данные и поместите их в csv. Для вставки данных в SQL перейдите сюда: stackoverflow.com/questions/21257899/…

Chris Risley 20.04.2018 22:27

Скорее всего, вы могли бы сделать все это, импортировав csv в базу данных и выполнив там работу в sql.

tdelaney 20.04.2018 22:29
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
5
1 326
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Не тестировал, но вы можете попробовать следующее:

conn = sqlite3.connect(central_database, check_same_thread=False)
cur = self.conn.cursor()

# Create table using first row of csv (column names)

#user defines csv file and other params via http form -> script
with open ('test.csv', 'r') as f:
    reader = csv.reader(f)
    columns = next(reader) 
    query = 'insert into MyTable({0}) values ({1})'
    query = query.format(','.join(columns), ','.join('?' * len(columns)))
    for data in reader:
        cur.execute(query, data)
    cur.commit()

cur.execute(script)
csv = cur.fetchall()

# Delete table 

Источник: Запись CSV-файла в базу данных SQL Server с использованием Python

Это похоже на то, что я мог бы работать в коде. Спасибо. Действительно ли эта таблица временная? Я хочу убедиться, что после выполнения запроса и создания файла csv таблица больше не существует в базе данных.

Josh Sharkey 20.04.2018 22:53

Плохо, я забыл добавить часть, в которой вы создаете таблицу. Это настолько временно, насколько вы хотите. Вам нужно будет создать таблицу, и, если хотите, вы можете удалить ее после экспорта данных.

Chris Risley 20.04.2018 22:55

Не могли бы вы указать код для создания таблицы? Я предполагаю, что здесь важна переменная columns, поскольку они будут использоваться в запросе

Josh Sharkey 20.04.2018 23:19

Думаю, я уловил суть. Вся ручная обработка запросов и сохранение. Спасибо за понимание, Крис!

Josh Sharkey 20.04.2018 23:37

Вам нужно будет построить строку запроса, используя имена столбцов из первой строки CSV. Что-то вроде: cur.execute («удалить таблицу, если существует временная_таблица»), за которой следует cur.execute («создать таблицу temp_table (тип имени_столбца, ...)

Chris Risley 21.04.2018 00:23

И для построения запроса создайте словарь, в котором имя столбца соответствует типу.

Chris Risley 21.04.2018 00:24

Крис: Я прихожу к выводу, что это может быть немного медленным, если файл CSV очень большой. Есть ли другой подход, который использует функцию sqlite3 '.import {filename}'?

Josh Sharkey 24.04.2018 06:04

Другие вопросы по теме