का उपयोग कर फिर से कनेक्ट नहीं हो सकता है, मैं aiohttp
और sqlalchemy
का उपयोग कर रहा हूं, और मैंने सिंगलटन बनाया है जो मुझे कनेक्ट करने में मदद करता है जब मुझे SQLAlchemy (कोड निम्न) के उदाहरण की आवश्यकता होती है । दुर्भाग्य से, हर एक बार थोड़ी देर में मैं निम्न त्रुटि (जो मैं सर्वर को पुनः प्रारंभ करके "हल") मिलती है:aiohttp + sqlalchemy: अमान्य लेनदेन वापस
Dec 11 09:35:29 ip-xxx-xxx-xxx-xxx gunicorn[16513]: sqlalchemy.exc.StatementError: (sqlalchemy.exc.InvalidRequestError) Can't reconnect until invalid transaction is rolled back [SQL: '... \nFROM ...\nWHERE ... = %(username_1)s \n LIMIT %(param_1)s'] [parameters: [{}]]```
वहाँ वर्तमान कोड ठीक करने के लिए कोई तरीका है? धन्यवाद :)
CONNECTION_DETAILS = {
'driver': 'pymysql',
'dialect': 'mysql',
'host': os.environ.get('HOST'),
'port': 3306,
'user': 'master',
'password': os.environ.get('PASSWORD'),
'database': 'ourdb',
'charset': 'utf8'
}
_instance = None
def __new__(cls, *args, **kwargs):
if not cls._instance:
con_str = '{dialect}+{driver}://{user}:{password}@' \
'{host}:{port}/{database}?charset={charset}'\
.format(**cls.CONNECTION_DETAILS)
try:
engine = sqlalchemy.create_engine(con_str)
Session = scoped_session(sessionmaker(bind=engine))
session = Session() # Create the ORM handle
except sqlalchemy.exc.OperationalError:
logger.exception('Establishing database connection error.')
cls._instance = super().__new__(cls)
logger.debug("Returning database's session.")
cls._instance.session = session
# Initializing tables
cls._instance.Users = Users
cls._instance.Services = Services
cls._instance.APIKeys = APIKeys
return cls._instance
मुझे आपके प्रश्न के बारे में कोई जानकारी नहीं मिली है, लेकिन आप sqlalchemy के साथ aiohttp का उपयोग क्यों करते हैं? एक async ढांचे के साथ एक non-async ओआरएम? – Juggernaut
मुझे लगता है कि यह एक ही थ्रेड में चल रहे एकाधिक एआईओटीपी अनुरोधों के कारण है, इसलिए 'सत्र' को 'scoped_session' के 'scopefunc' के कारण कई कार्यों के बीच साझा किया जाता है। [यह प्रश्न] देखें (http://stackoverflow.com/questions/34369164/correct-usage-of-sqlalchemy-scoped- सत्र-with-python-asyncio)। – univerio