问题
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