Telethon: OperationalError: database is locked

て烟熏妆下的殇ゞ 提交于 2019-12-25 00:14:48

问题


Apologies if it is a silly question.

I am trying telethon for the first time and it fails to synchronize with my telegram API.

I get an IP address when I type this code:

But I get this message when I try to connect to start or connect the client:

And finally, I get OperationalError: database is locked error when I try to log in using my phone.

The error message in full:

-------------------------------------------------------------------- 

OperationalError Traceback (most recent 
 call last)
<ipython-input-13-880bc0e4ea12> in <module>()
  1 from telethon import TelegramClient, sync
 ----> 2 client = TelegramClient('session_name', api_id, api_hash)
  3 
  4 client.connect()
  5 if not client.is_user_authorized():

 /anaconda3/lib/python3.7/site- 
 packages/telethon/client/telegrambaseclient.py in __init__(self, 
 session, api_id, api_hash, connection, use_ipv6, proxy, timeout, 
 request_retries, connection_retries, retry_delay, auto_reconnect, 
 sequential_updates, flood_sleep_threshold, device_model, 
 system_version, app_version, lang_code, system_lang_code, loop, 
 base_logger)
 221                 DEFAULT_DC_ID,
 222                 DEFAULT_IPV6_IP if self._use_ipv6 else 
 DEFAULT_IPV4_IP,
 --> 223                 DEFAULT_PORT
 224             )
 225 

 /anaconda3/lib/python3.7/site-packages/telethon/sessions/sqlite.py 
 in set_dc(self, dc_id, server_address, port)
184     def set_dc(self, dc_id, server_address, port):
185         super().set_dc(dc_id, server_address, port)
--> 186         self._update_session_table()
187 
188         # Fetch the auth_key corresponding to this data center

/anaconda3/lib/python3.7/site-packages/telethon/sessions/sqlite.py 
in _update_session_table(self)
205         # some more work before being able to save auth_key's 
 for

206         # multiple DCs. Probably done differently.
 --> 207         c.execute('delete from sessions')
208         c.execute('insert or replace into sessions values 
(?,?,?,?)', (
209             self._dc_id,

OperationalError: database is locked

What does coroutine object AuthMethods._start at mean? Why is it giving database is locked?


回答1:


Referring to the Telethon documentation, The database will be locked if you don't close it properly.

You are using the same session file from many TelegramClient's at once.

First

In [9] client.start()

TelegramClient started

Second

In [13] client.connect()

TelegramClient's already active

This also causes database is locked error. More info:




回答2:


You have 2 problems here, first problem is related to authentication i guess, i will talk about database lock problem :

Session name that you have passed is already in use or active hence locked.

It becomes session file name if you use string as a parameter like here you have passed "name", this is one way to create a session.

other wise you can use telethon.sessions.abstract.Session object and pass it as parameter , this is second way.

And third way, you can simply pass None.

If it’s None, the session will not be saved, and you should call log_out() when you’re done.

client =  TelegramClient(None, api_id, api_hash)

Hope this helps.



来源:https://stackoverflow.com/questions/54369315/telethon-operationalerror-database-is-locked

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!