8 / 8 / 5
Регистрация: 19.11.2012
Сообщений: 438
1

Сравнивание двух таблиц sqlite

04.03.2017, 19:32. Показов 3111. Ответов 6
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. У меня есть две почти одинаковые таблицы таблицы: a и b. Нужно их сравнить и в случае отсутствия какой-либо из строк - вывести эту строку на экран. В таблице есть столбец с уникальными числами. Я решил сравнивать по нему. Но что-то не могу понять как это сделать. Подскажите, пожалуйста, как это реализовать :|
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.03.2017, 19:32
Ответы с готовыми решениями:

Удаление данных(товаров) из разных таблиц(категорий / sqlite) Inline кнопками tgBot aiogram
Доброго времени суток. Мне нужны ваши знания, ибо найти нужный ответ я не сумел, к сожалению. ...

SqLite - не более 64 таблиц в соединении / SqLite - at most 64 tables in a join
Что-то не сложилось у меня с sqlite3. Подскажите, какая библиотека самая мощная, чтобы связать...

Проверка на равносильность формул, сравнивание последних столбцов таблиц
Здравствуйте. Проблемка с заданием - нужно проверить равносильны ли 2 формулы,который ввел...

Сравнивание двух масивов
Задача такова: есть два массива а{1,2,3,4,5,6,7,8,9}, b{1,3,5,7}. Если в массиве "b" есть те же...

Сравнивание двух дат
Есть List<PriceList> и с помощью Pomelo.EntityFrameworkCore.MySql я получаю данные с БД в...

6
103 / 81 / 54
Регистрация: 25.11.2016
Сообщений: 278
04.03.2017, 19:43 2
qozyrek, Обязательно средствами питона? Потому что можно решить эту задачу правильно составленным sql запросом. Если второе, тогда вам нужно обратиться за помощью в другой раздел форма.
1
8 / 8 / 5
Регистрация: 19.11.2012
Сообщений: 438
04.03.2017, 20:20  [ТС] 3
Ennjin, можно и так(вторым способом), но нужно будет решить есть ли вообще разница между таблицами, если она есть - записать её в третью таблицу.

Добавлено через 14 минут
Ennjin, вот кусок кода, который, как я думал сделает это , но выводит полностью весь столбец одной таблицы и странным образом:
Python
1
2
3
4
5
6
current_table = c.execute('SELECT id FROM current_friends UNION SELECT id FROM fresh_friends')
one = c.fetchall
 
while one is not None:
    one = c.fetchone()
    print(one)
Кликните здесь для просмотра всего текста

(1,)
(4673821,)
(4689306,)
(6069598,)
(6140511,)
(7442774,)
(8984269,)
(9389693,)
(10062932,)
(11296155,)
(11583889,)
(12774619,)



Добавлено через 16 минут
Ennjin, это всё та же задача с друзьями Вк просто теперь нужно смотреть кто добавился и кого отбавили.
Вот, вроде, рабочий запрос:
SQL
1
SELECT id FROM current_friends WHERE NOT EXISTS(SELECT id FROM fresh_friends WHERE(fresh_friends.id = current_friends.id))
Но он показывает всё в куче(т.е. и удалённых, и добавленных). Вот почему я хотел делать первым способом, средствами питона.
0
103 / 81 / 54
Регистрация: 25.11.2016
Сообщений: 278
04.03.2017, 20:24 4
qozyrek,
Достаточно взять данные из двух таблиц, записать их в разные переменные, и сравнить.
Если таблицы(переменные) равны, вернет True, иначе False

Добавлено через 2 минуты
А еще это можно сделать непосредственно sql запросом
1
8 / 8 / 5
Регистрация: 19.11.2012
Сообщений: 438
05.03.2017, 17:48  [ТС] 5
Ennjin, вот то, что я набросал. Зависаю на стадии добавления этой самой разницы в отдельную таблицу. Можете взглянуть свежим глазом на мой гКод и сказать в чём дело?
Сама ошибка:
Кликните здесь для просмотра всего текста

[mohax@localhost ~]$ python ~/Projects/search/ttta.py
Traceback (most recent call last):
File "/home/mohax/Projects/search/ttta.py", line 67, in <module>
c.execute("""INSERT INTO b (id) VALUES ('%s')"""%(treeq))
sqlite3.IntegrityError: UNIQUE constraint failed: b.id


Код:
Кликните здесь для просмотра всего текста

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
import requests
import json
import sqlite3
import time
 
url = 'https://api.vk.com/method/friends.search?user_id=143578788&count=100&fields=online,sex,city&access_token=36681f0f5bf5a07f660417a70151c27b181f743876e54c07891c73883697b31ccd001be05b22308acc30e&v=5.62'
r = 0
response = requests.get(url).text
data = json.loads(response)
i = 0
test = ""
testAth = ""
a = 0
conn = sqlite3.connect('/home/mohax/Projects/search/db/friends.sqlite')
c = conn.cursor()
d = conn.cursor()
 
c.execute("DELETE FROM fresh_friends")
 
def addUser(tableName, ident, first_name, last_name, sex, online, city):
    
    sex_one = ""    
    online_one = ""
    
    if sex == 1:
        sex_one = "женский"
    else:
        sex_one = "мужской"
 
    if online == 1:
        online_one = "в сети"
    else:
        online_one = "не в сети"
 
    c.execute("""INSERT INTO """ + tableName + """ (id, first_name, last_name, sex, online, city) 
              VALUES ('%s', '%s', '%s', '%s', '%s', '%s')"""%(ident, first_name, last_name, sex_one, online_one, city))
    conn.commit()
 
for item in data["response"]["items"]:
 
    i = i + 1
 
    try:
        city_title = data["response"]["items"][i-1]["city"]["title"]
        
        if item["first_name"] == "Мар'ян":
            addUser("fresh_friends", item["id"], "Марьян", item["last_name"], item["sex"], item["online"], city_title)        
        else:
            addUser("fresh_friends", item["id"], item["first_name"], item["last_name"], item["sex"], item["online"], city_title)   
        test += "%s %s %s (%s): online: %s sex: %s  %s\n" % (i, item["first_name"], item["last_name"], item["id"], item["online"], item["sex"], city_title)
        #print(test) 
    except KeyError:
        test += "%s %s %s (%s): online: %s sex: %s\n" % (i, item["first_name"], item["last_name"], item["id"], item["online"], item["sex"])
        addUser("fresh_friends", item["id"], item["first_name"], item["last_name"], item["sex"], item["online"], "Город не указан")
        
oneTable = c.execute('SELECT id FROM current_friends')
oneq = c.fetchall()
twoTable = c.execute('SELECT id FROM fresh_friends')
twoq = c.fetchall()
 
if oneq != twoq:
    r = 1
    current_table = c.execute('SELECT id FROM current_friends WHERE NOT EXISTS(SELECT id FROM fresh_friends WHERE(fresh_friends.id = current_friends.id))')
    treeq = c.fetchall
    
    while treeq is not None:
        c.execute("""INSERT INTO b (id) VALUES ('%s')"""%(treeq))
    
    
    treeTable = c.execute('SELECT id FROM b')
    treeq = c.fetchall()
    
#-    if oneq != treeq:
        #НУЖНО ДОБАВИТЬ ПРОВЕРКУ УДАЛИВШИХСЯ ДРУЗЕЙ И ДОБАВИВШИХСЯ 
#-else:
#-    time.sleep(3600)
#    if city_title == "Athens":
#        try:
#            a += 1
#            testAth +=  "%s %s %s (%s): online: %s sex: %s  %s\n" % (a, item["first_name"], item["last_name"], item["id"], item["online"], item["sex"], city_title)
#            addUser("fresh", item["id"], item["first_name"], item["last_name"], item["sex"], item["online"], city_title)       
#        except KeyError:
#            o = "Город не указан"
#            addUser("fresh_friends", item["id"], item["first_name"], item["last_name"], item["sex"], item["online"], o)
 
#print(test)


Добавлено через 20 часов 12 минут
Ennjin, мне помогли с запросами, в sqlite менеджере работают как надо. Но как только я их ставлю в код - никаких изменений в таблицах не наблюдается. Всё отрабатывает без каких-либо ошибок. Не подскажете в чём может быть дело?
Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
import requests
import json
import sqlite3
import time
 
url = 'https://api.vk.com/method/friends.search?user_id=143578788&count=100&fields=online,sex,city&access_token=f68ee5df73e54dc3dd1316a5b37d85e46defa9e765db0e660bf616e2e97bfb601f027ae49efaf98fdf79e&v=5.62'
r = 0
response = requests.get(url).text
data = json.loads(response)
i = 0
test = ""
testAth = ""
a = 0
conn = sqlite3.connect('/home/mohax/Projects/search/db/friends.sqlite')
c = conn.cursor()
d = conn.cursor()
 
c.execute("DELETE FROM fresh_friends")
 
def addUser(tableName, ident, first_name, last_name, sex, online, city):
    
    sex_one = ""    
    online_one = ""
    
    if sex == 1:
        sex_one = "женский"
    else:
        sex_one = "мужской"
 
    if online == 1:
        online_one = "в сети"
    else:
        online_one = "не в сети"
 
    c.execute("""INSERT INTO """ + tableName + """ (id, first_name, last_name, sex, online, city) 
              VALUES ('%s', '%s', '%s', '%s', '%s', '%s')"""%(ident, first_name, last_name, sex_one, online_one, city))
    conn.commit()
 
for item in data["response"]["items"]:
 
    i = i + 1
 
    try:
        city_title = data["response"]["items"][i-1]["city"]["title"]
        
        if item["first_name"] == "Мар'ян":
            addUser("fresh_friends", item["id"], "Марьян", item["last_name"], item["sex"], item["online"], city_title)        
        else:
            addUser("fresh_friends", item["id"], item["first_name"], item["last_name"], item["sex"], item["online"], city_title)   
        test += "%s %s %s (%s): online: %s sex: %s  %s\n" % (i, item["first_name"], item["last_name"], item["id"], item["online"], item["sex"], city_title)
        #print(test) 
    except KeyError:
        test += "%s %s %s (%s): online: %s sex: %s\n" % (i, item["first_name"], item["last_name"], item["id"], item["online"], item["sex"])
        addUser("fresh_friends", item["id"], item["first_name"], item["last_name"], item["sex"], item["online"], "Город не указан")
        
oneTable = c.execute('SELECT id FROM current_friends')
oneq = c.fetchall()
twoTable = c.execute('SELECT id FROM fresh_friends')
twoq = c.fetchall()
 
if oneq != twoq:
    r = 1
    c.execute('''INSERT INTO del_friends SELECT cf.* FROM current_friends cf LEFT JOIN fresh_friends ff ON cf.Id = ff.Id LEFT JOIN del_friends df ON cf.Id = df.Id WHERE ff.Id IS NULL AND df.Id IS NULL''')
    d.execute(
   '''INSERT INTO new_friends
SELECT
  ff.*
FROM
  fresh_friends ff
  LEFT JOIN current_friends cf ON cf.Id = ff.Id
  LEFT JOIN new_friends nf ON ff.Id = nf.Id
WHERE
   cf.Id IS NULL AND nf.Id IS NULL''')
    print("ok")
0
103 / 81 / 54
Регистрация: 25.11.2016
Сообщений: 278
05.03.2017, 18:22 6
qozyrek, После всех манипуляций с данными нужно применить изменения и закрыть соединение.
Python
1
2
conn.commit()
conn.close()
1
8 / 8 / 5
Регистрация: 19.11.2012
Сообщений: 438
05.03.2017, 18:28  [ТС] 7
Ennjin, точно
0
05.03.2017, 18:28
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.03.2017, 18:28
Помогаю со студенческими работами здесь

Сравнивание двух значений
Есть два столбца номеров. Нужно значение в первом столбце со значение вторым, если находит...

сравнивание двух чисел
Написать функцию, которая сравнивает два целых числа и возвращает результат сравне-ния в виде...

Сравнивание частей двух строк
Здравствуйте. Помогите составить функцию.. В общем задача: Требуется что бы сравнивались начало...

Сравнивание двух и более алгоритмов
Не могу понять почему у меня после первой функции(BubbleSort), переменная myArray становится...

Сравнивание двух вводимых чисел
Здравствуйте, у меня есть задача ввести, а затем сравнить два числа и вывести какой из них...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru