반응형
mysql에 연결하는 파이썬 프로그램을 만들고 있습니다.
성공적으로 연결되었음을 표시하기 위해 테이블에 숫자 1이 포함되어 있는지 확인해야합니다. 이것은 지금까지 내 코드입니다.
xcnx.execute('CREATE TABLE settings(status INT(1) NOT NULL)')
xcnx.execute('INSERT INTO settings(status) VALUES(1)')
cnx.commit()
sqlq = "SELECT * FROM settings WHERE status = '1'"
xcnx.execute(sqlq)
results = xcnx.fetchall()
if results =='1':
print 'yep its connected'
else:
print 'nope not connected'
내가 무엇을 놓쳤습니까? 나는 SQL 멍청이입니다. 감사합니다.
해결 방법
가장 효율적인 "존재합니까"쿼리는 count
를 수행하는 것입니다.
sqlq = "SELECT COUNT(1) FROM settings WHERE status = '1'"
xcnx.execute(sqlq)
if xcnx.fetchone()[0]:
# exists
데이터베이스에 필드 또는 행에 대한 계산 작업을 수행하도록 요청하는 대신 결과가 일치하는 항목이 있으면 1 또는 0을 반환하도록 요청하는 것입니다. 이것은 실제 레코드를 반환하고 클라이언트 측에서 양을 계산하는 것보다 훨씬 효율적입니다. 양쪽에서 직렬화 및 역 직렬화와 데이터 전송을 절약하기 때문입니다.
In [22]: c.execute("select count(1) from settings where status = 1")
Out[22]: 1L # rows
In [23]: c.fetchone()[0]
Out[23]: 1L # count found a match
In [24]: c.execute("select count(1) from settings where status = 2")
Out[24]: 1L # rows
In [25]: c.fetchone()[0]
Out[25]: 0L # count did not find a match
count (*)
는 count (1)
와 같습니다. 귀하의 경우에는 새 테이블을 생성하기 때문에 1 개의 결과가 표시됩니다. 10,000 개의 일치 항목이있는 경우 10000이됩니다.하지만 테스트에서 관심있는 것은 0이 아닌지 여부입니다. 따라서 bool 진리 테스트를 수행 할 수 있습니다.
업데이트
실제로 행 개수 만 사용하고 결과를 가져 오지 않는 것이 훨씬 더 빠릅니다.
In [15]: if c.execute("select (1) from settings where status = 1 limit 1"):
print True
True
In [16]: if c.execute("select (1) from settings where status = 10 limit 1"):
print True
In [17]:
이것은 또한 django의 ORM이 queryObject.exists ()
를 수행하는 방법입니다.
참조 페이지 https://stackoverflow.com/questions/13373843
반응형
'MySql' 카테고리의 다른 글
MySQL DBCP에서 (useUnicode = yes characterEncoding = UTF-8) 사용 방법 (0) | 2021.01.21 |
---|---|
MySQL 파일을 만들거나 쓸 수 없습니다 (오류 코드 : 22). (0) | 2021.01.21 |
MySQL MySql : ORDER BY 부모 및 자식 (0) | 2021.01.21 |
MySQL PDO를 사용하여 Out 매개 변수로 스토어드 프로 시저 호출 (0) | 2021.01.21 |
MySQL이 빈 문자열을 NULL로 자동 변환 할 수 있습니까? (0) | 2021.01.21 |
댓글