MySQL에서 sqlalchemy 연결을 닫는 방법
실행하려는 샘플 코드는 다음과 같습니다.
for i in range(1,2000):
db = create_engine('mysql://root@localhost/test_database')
conn = db.connect()
#some simple data operations
conn.close()
db.dispose()
MySQL에서 "Too many connections" 오류를 표시하지 않고 실행할 수 있는 방법이 있습니까?그렇지 않으면 연결을 처리할 수 있거나 연결 풀을 가질 수 있다는 것을 이미 알고 있습니다.squalchemy의 연결을 제대로 닫는 방법을 알고 싶습니다.잘 부탁드립니다!
이 코드를 올바르게 쓰는 방법은 다음과 같습니다.
db = create_engine('mysql://root@localhost/test_database')
for i in range(1,2000):
conn = db.connect()
#some simple data operations
conn.close()
db.dispose()
즉,Engine
는 접속의 팩토리이며 접속의 풀이기도 합니다.접속 자체가 아닙니다.당신이 말할 때conn.close()
접속은 실제로는 닫히지 않고 엔진 내의 연결 풀로 돌아갑니다.
연결을 실제로 닫는 경우(풀링되지 않음),NullPool
:
from sqlalchemy.pool import NullPool
db = create_engine('mysql://root@localhost/test_database', poolclass=NullPool)
상기와 함께Engine
설정, 각 콜의conn.close()
기본 DBAPI 연결이 닫힙니다.
OTOH가 실제로 각 콜의 다른 데이터베이스(즉, 하드 코드)에 접속하는 경우"localhost/test_database"
하나의 예에 불과하고 실제로 많은 다른 데이터베이스를 가지고 있습니다.그리고 이 접근방식은dispose()
정상입니다. 풀에서 체크 아웃되지 않은 모든 연결이 닫힙니다.
위의 모든 경우에서 중요한 것은,Connection
오브젝트가 닫힙니다.close()
. 어떤 종류의 "접속 없는" 실행을 사용하고 있다면,engine.execute()
또는statement.execute()
,그ResultProxy
실행 콜에서 반환된 오브젝트는 완전히 읽어야 합니다.그렇지 않으면 를 통해 명시적으로 닫아야 합니다.close()
.aConnection
또는ResultProxy
아직 열려 있는 것은NullPool
또는dispose()
모든 마지막 연결을 닫는 것으로부터 접근합니다.
관련성이 없는 문제로 데이터베이스와의 접속을 끊는 해결책을 찾으려고 했다(포킹하기 전에 접속을 끊어야 한다).
연결 풀에서도 연결을 비활성화해야 합니다.
이 예에서는 다음과 같습니다.
for i in range(1,2000):
db = create_engine('mysql://root@localhost/test_database')
conn = db.connect()
# some simple data operations
# session.close() if needed
conn.invalidate()
db.dispose()
이걸로 할게요.
engine = create_engine('...')
with engine.connect() as conn:
conn.execute(text(f"CREATE SCHEMA IF NOT EXISTS...")
engine.dispose()
내 경우 항상 작동하며 닫을 수 있습니다!따라서 close() 전에 invalidate()를 사용하여 트릭을 만듭니다.그렇지 않으면 close()는 최악입니다.
conn = engine.raw_connection()
conn.get_warnings = True
curSql = xx_tmpsql
myresults = cur.execute(curSql, multi=True)
print("Warnings: #####")
print(cur.fetchwarnings())
for curresult in myresults:
print(curresult)
if curresult.with_rows:
print(curresult.column_names)
print(curresult.fetchall())
else:
print("no rows returned")
cur.close()
conn.invalidate()
conn.close()
engine.dispose()
언급URL : https://stackoverflow.com/questions/8645250/how-to-close-sqlalchemy-connection-in-mysql
'programing' 카테고리의 다른 글
ElasticSearch를 MySQL과 통합하는 방법 (0) | 2022.10.08 |
---|---|
javascript에서 배열 인덱스의 존재 여부를 확인하는 방법 (0) | 2022.10.08 |
DB에서 설정을 가져오는 함수에서 오류가 발생했습니다. (0) | 2022.10.08 |
포틀렛과 서블릿의 차이점은 무엇입니까? (0) | 2022.10.08 |
TDD용 JavaScript 유닛 테스트 도구 (0) | 2022.10.08 |