@akrel

Как организовать внос данных в базу данных?

У меня есть вк бот на пайтоне с подключенной базой данных, в нем есть код который автоматически находит из всех участников беседы администраторов и заносит их в owner в таком виде [595883127, 208790503, 43666547, и т.д]
вот сам код:
owner = [] 
			
for manager in vk_session.method("messages.getConversationMembers", {
	"peer_id": 2000000000 + id, 
	'fields': 'profiles'
	})['items']:
	if manager.get("is_admin", False):
		owner.append(manager['member_id'])

Подскажите, как можно вытаскивать из owner по 1 id, проверять нет ли в базе данных такого id, если есть то проверять следующий id, если нет то заносить его и дальше проверять остальные?
  • Вопрос задан
  • 102 просмотра
Решения вопроса 2
mayton2019
@mayton2019
Bigdata Engineer
Сколько работаю с БД - впервые слышу глагол "внос". Слышал: загрузка, input, ingestion, migration, load, pull.

Ладно. Вобщем ты конено тег не поставил БД. В классическом SQL я не помню такой команды. Но в Postgres есть
insert ... on conflict ...
где ты указываешь что делать если ключик уже есть.

В Oracle можно сделать как-то так
merge into .... using dual on (key = key)
         when not matched then insert (...) values (...)
             when matched then update set ....;


И возможно в современных SQL/Nosql системах уже UPSERT поддерживается нативно.
Ответ написан
@akrel Автор вопроса
Решил задачу с таким кодом:
with sq.connect('data.bd') as con:
				con.row_factory = sq.Row
				cur = con.cursor()
				cur.execute('SELECT vk_id FROM Owners')
				for result in cur:
					for i in owner:
						if i == result['vk_id']:
							print('1')
						else:
							if i > 0:
								user = utils.get_owner_by_id(i)

Код utils.get_owner_by_id:
def get_owner_by_id(i):
    Owner(
        vk_id=i,
    ).save()

Но к сожалению через несколько секунд после исполнения кода вылезает ошибка
Exception has occurred: OperationalError
database is locked
так что теперь необходимо решать ее.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы