Сделайте функцию сценария SQL с помощью сценария выполнения Python

Я работаю с базой данных в SQLite и импортирую кучу файлов csv в свою базу данных. К сожалению, насколько я могу судить, нет возможности добавить первичный ключ во время импорта, поэтому я использую обходной путь, в котором я читаю файл csv и использую to_sql от Pandas, а затем executescript:

df = pd.read_csv('filepath.csv', header = 0, index_col = False, encoding = 'UTF-8')
df.to_sql(name = 'table1', con = conn, if_exists='replace', index=False)

c.executescript('''
PRAGMA foreign_keys=off;

BEGIN TRANSACTION;
ALTER TABLE table1 RENAME TO table1_alt;

/*create a new table with the same column names and types while
defining a primary key for the desired column*/
CREATE TABLE Ass_info_table (column1 INT,
                    column2 TEXT,
                    column3 INT,
                    column4 INT,
                    column5 INT,
                    column6 TEXT,
                    column7 TEXT,
                    column8 TEXT,
                    column9 TEXT,
                    column10 TEXT,
                    column11 TEXT,
                    column12 INT,
                    column13 INT,
                    ID INT PRIMARY KEY NOT NULL);

INSERT INTO table1 SELECT * FROM table1_alt;

DROP TABLE table1_alt;
COMMIT TRANSACTION;

PRAGMA foreign_keys=on;''')

Это работает отлично, но у меня есть куча файлов csv, которые я хотел передать на glob и импортировать их все в цикле. Моя проблема в том, что для этого мне нужно найти способ получить имена таблиц и столбцов в этом сценарии SQL в функции. Эта функция может выполняться при импорте таблицы в базу данных или после нее, это не имеет особого значения.

Всем, у кого есть предложения, мы будем рады!

Почему бы не использовать командную строку SQLite для импорта CSV-файлов в текущие пустые таблицы с целочисленным первичным ключом, поскольку согласно часто задаваемым вопросам SQLite: Столбец, объявленный INTEGER PRIMARY KEY, будет автоматически увеличиваться?

Parfait 15.08.2018 19:57

вы используете pd.to_sql и скрипт отдельно?

mad_ 15.08.2018 20:09

mad_ Я использую их отдельно, так как простой импорт csv в базу данных дает мне таблицу без первичного ключа. Парфе, если я это сделаю, то у меня будет таблица с уже назначенным первичным ключом, верно? Чего я не хочу.

DrakeMurdoch 15.08.2018 20:12

Как и любые автоинкременты базы данных (или последовательности, если используется Oracle и идентификация в SQL Server), первичный ключ будет автоматически увеличиваться с каждой новой записью. Досрочно ничего не назначается.

Parfait 15.08.2018 20:20

К сожалению, файлы csv уже имеют встроенный уникальный идентификатор, который мне нужно использовать в качестве первичного ключа (для реляционных целей), поэтому я должен использовать то, что уже есть, и назначить первичный ключ одному из существующих столбцов.

DrakeMurdoch 15.08.2018 20:24
Почему в 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
169
1

Ответы 1

Если вы можете анализировать имя таблицы и имена столбцов из CSV или других источников, вы можете сделать запрос, прежде чем передавать его в функцию выполнения.

Пример:

table_name = "P_data"
query_template = "SELECT * FROM  {0}"
final_query=query_template.format(table_name)

а затем вы можете передать final_query в выполнение. Мне нравится делать окончательный запрос с помощью шаблонов, но вы можете сделать это напрямую.

query_template = "SELECT * FROM  {0}".format(table_name)"

Надеюсь, это поможет тебе.

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