Форум программистов, компьютерный форум, киберфорум
Python: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
8 / 8 / 5
Регистрация: 19.11.2012
Сообщений: 438

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

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

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

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

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

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

6
 Аватар для Ennjin
103 / 81 / 54
Регистрация: 25.11.2016
Сообщений: 278
04.03.2017, 19:43
qozyrek, Обязательно средствами питона? Потому что можно решить эту задачу правильно составленным sql запросом. Если второе, тогда вам нужно обратиться за помощью в другой раздел форма.
1
8 / 8 / 5
Регистрация: 19.11.2012
Сообщений: 438
04.03.2017, 20:20  [ТС]
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
 Аватар для Ennjin
103 / 81 / 54
Регистрация: 25.11.2016
Сообщений: 278
04.03.2017, 20:24
qozyrek,
Достаточно взять данные из двух таблиц, записать их в разные переменные, и сравнить.
Если таблицы(переменные) равны, вернет True, иначе False

Добавлено через 2 минуты
А еще это можно сделать непосредственно sql запросом
1
8 / 8 / 5
Регистрация: 19.11.2012
Сообщений: 438
05.03.2017, 17:48  [ТС]
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
 Аватар для Ennjin
103 / 81 / 54
Регистрация: 25.11.2016
Сообщений: 278
05.03.2017, 18:22
qozyrek, После всех манипуляций с данными нужно применить изменения и закрыть соединение.
Python
1
2
conn.commit()
conn.close()
1
8 / 8 / 5
Регистрация: 19.11.2012
Сообщений: 438
05.03.2017, 18:28  [ТС]
Ennjin, точно
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
05.03.2017, 18:28
Помогаю со студенческими работами здесь

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

Сравнивание двух дат
Есть List&lt;PriceList&gt; и с помощью Pomelo.EntityFrameworkCore.MySql я получаю данные с БД в коллекцию. Мне нужно из всей коллекции отобрать...

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

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

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


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Новые блоги и статьи
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru