2017-02-03 1 views
1

Я пытаюсь написать метод, который сравнивает значения в данной таблице базы данных SQLite с другой существующей таблицей базы данных. Я уже написал метод «описывают» для данной базы данных для каждой таблицы в базе данных, следующий кортеж добавленным в массив:Сравнение значений в таблицах SQLite для баз данных в Python 3

databaseInfo.append((table, numberOfColumns, numberOfRows, numberOfCells)) 

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

tables = [str(i[0]) for i in databaseInfo] 
columns = [int(i[1]) for i in databaseInfo] 
rows = [int(i[2]) for i in databaseInfo] 
cells = [int(i[3]) for i in databaseInfo] 

Так что я спрашиваю, как я могу использовать SQLite команды для перебора ячеек базы данных и сравнить их. Я ищу логику/синтаксис, как я смогу это сделать.

Например, если мне дана база данных с 4 таблицами, я хочу создать метод, который для каждой таблицы будет выполняться, и проверить, действительно ли значение каждой ячейки, если оно уже существует в моей базе данных. Так что я хотел бы сделать что-то вроде следующего:

у нас есть две таблицы

Моя таблица:

+----+-------+-----+---------------+ 
| pk | name | age | occupation | 
+----+-------+-----+---------------+ 
| 0 | Joey | 17 | Student  | 
| 1 | Jerry | 18 | Student  | 
| 2 | Gabe | 20 | Mathematician | 
| 3 | Ian | 34 | Unemployed | 
| 4 | Rob | 33 | Teacher  | 
| 5 | Harry | 18 | Student  | 
| 6 | Joey | 20 | Economist  | 
| 7 | Jerry | 33 | Coach   | 
+----+-------+-----+---------------+ 

Учитывая таблицу:

+----+----------------+--------------------+---------------+ 
| pk | Husband  | height(decimeters) | occupation | 
+----+----------------+--------------------+---------------+ 
| 0 | Joey   | 16    | Student  | 
| 1 | Jim   | 17    | Programmer | 
| 2 | Joey   | 16    | Teacher  | 
| 3 | Jerry   | 20    | Unemployed | 
| 4 | Tim   | 13    | Unemployed | 
| 5 | Harry   | 18    | Programmer | 
| 6 | Steve   | 18    | Economist  | 
| 7 | Jerry   | 11    | Painter  | 
+----+----------------+--------------------+---------------+ 

Учитывая, что я могу описать таблицу с моим методом python, я хотел бы сделать курсор для каждой базы данных, прочитать данную таблицу и быть в состоянии идентифицировать и изменять значения, которые являются избыточными относительно моего да tabase. Например, скажем, что я хочу заменить каждое избыточное значение «избыточным»! Возвращаясь таблицу, как это:

ColumnsToExclude = pk 

╔════╦════════════╦════════════════════╦════════════╗ 
║ pk ║ Husband ║ height(decimeters) ║ occupation ║ 
╠════╬════════════╬════════════════════╬════════════╣ 
║ 0 ║ redundant! ║ 16     ║ redundant! ║ 
║ 1 ║ Jim  ║ redundant!   ║ Programmer ║ 
║ 2 ║ redundant! ║ 16     ║ redundant! ║ 
║ 3 ║ redundant! ║ redundant!   ║ redundant! ║ 
║ 4 ║ Tim  ║ 13     ║ redundant! ║ 
║ 5 ║ redundant! ║ redundant!   ║ Programmer ║ 
║ 6 ║ Steve  ║ redundant!   ║ redundant! ║ 
║ 7 ║ redundant! ║ 11     ║ Painter ║ 
╚════╩════════════╩════════════════════╩════════════╝ 
+0

Показать некоторые конкретные примеры. –

+0

@CL. Я добавил пример этого, но со списками. Означает ли это, что это более ясно? –

+0

Списки не являются таблицами (и разница имеет значение). Просьба предоставить некоторые примеры данных и желаемый результат. (См. [How to формат SQL-таблиц в переполнении стека post?] (Http://meta.stackexchange.com/q/96125), как добавить некоторые.) –

ответ

0

Можно было бы построить запрос SQL для поиска значения в соответствующем столбце другой таблицы:

SELECT pk, 
     CASE 
     WHEN Husband IN (SELECT Husband FROM MyTable) 
     THEN 'redundant!' ELSE Husband 
     END AS Husband, 
     CASE 
     WHEN height  IN (SELECT age  FROM MyTable) 
     THEN 'redundant!' ELSE height 
     END AS height, 
     CASE 
     WHEN occupation IN (SELECT occupation FROM MyTable) 
     THEN 'redundant!' ELSE occupation 
     END AS occupation 
FROM GivenTable; 

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

+0

Это замечательно! Однако при выполнении этого в python вам всегда нужно указать конкретный указатель базы данных. Считаете ли вы, что настройка MyTable для данногоDatabaseCursor.execute (SELECT givenDatabase), а затем использовать%, чтобы вставить его в этот аргумент? –

+0

Я не понимаю, что вы описываете. В любом случае, попробуйте или задайте новый вопрос. –