MySql 경고 트래핑
파이썬 스크립트에서 MySql을 사용하여 쿼리를 실행하는 동안 "Data Truncated for column 'xxx'" 경고를 트랩하고 싶습니다.
아래에서 코드를 제안하는 게시물을 보았는데 작동이 안 됩니다.
이 코드를 사용하기 전에 일부 특정 모듈을 가져와야 하는지 또는 일부 옵션/플래그를 호출해야 하는지 알고 계십니까?
다들 고마워요
페그
import MySQLdb
try:
cursor.execute(some_statement)
# code steps always here: No Warning is trapped
# by the code below
except MySQLdb.Warning, e:
# handle warnings, if the cursor you're using raises them
except Warning, e:
# handle warnings, if the cursor you're using raises them
경고는 단지 경고일 뿐입니다.그들은 (보통) stderr에게 보고되지만, 다른 일은 하지 않습니다.키우지 않고 있기 때문에 예외처럼 잡을 수는 없습니다.
그러나 다음을 사용하여 경고를 사용하지 않도록 설정하고 경고를 끄거나 예외로 설정할 수 있습니다.warnings
모듈.예를 들어.warnings.filterwarnings('error', category=MySQLdb.Warning)
방향을 틀다MySQLdb.Warning warnings
예외(이 경우 당신의 시도/예외를 사용하여 적발됨) 또는'ignore'
그들에게 전혀 보여주지 않기 위해서입니다.범주만 가지고 있는 것이 아니라 세분화된 필터를 더 많이 가지고 있을 수도 있고 아마도 그래야 할 수도 있습니다.
MySQL 경고를 오류로 표시:
import warnings, MySQLdb
warnings.filterwarnings('error', category=MySQLdb.Warning)
오류를 발생시키는 대신 무시하려면 바꾸기"error"
와 함께"ignore"
.
다음과 같이 시도 제외 블록에서 처리합니다.
try:
# a MySQL DB operation that raises a warning
# for example: a data truncated warning
except Warning as a_warning:
# do something here
우선 제가 먼저 설정을 해보겠습니다.sql_mode
. 세션 레벨에서 이 작업을 수행할 수 있습니다.를 실행하는 경우:
SET @@sql_mode:=TRADITIONAL;
(서버 레벨에서도 설정할 수 있지만 이를 위해서는 서버에 대한 액세스 권한이 필요합니다. 이 설정은 여전히 세션 레벨에서 무시되므로 결국 연결을 설정한 직후에 항상 세션 레벨에서 설정해야 합니다.
그러면 일반적으로 경고인 많은 것들이 오류가 됩니다.파이썬 수준에서 어떻게 발현되는지는 모르겠지만, 분명한 장점은 변경 사항이 데이터베이스에 저장되지 않는다는 것입니다.참조: http://dev.mysql.com/doc/refman/5.1/en/server-sql-mode.html#sqlmode_traditional
이를 무시하도록 트랩하려면 Python의 문서에 있는 "일시적으로 경고를 억제하는 중"을 참조하십시오.
https://docs.python.org/2/library/warnings.html#temporarily-suppressing-warnings
import warnings
with warnings.catch_warnings():
warnings.simplefilter("ignore")
# Put here your query raising a warning
그렇지 않으면 파이썬의 "경고" 모듈에 대한 문서만 읽어보세요. 나중에 잡으려면 예외로 변환할 수 있습니다.모두 여기 있습니다: https://docs.python.org/2/library/warnings.html
Thomas Wouters reply에 덧붙여 설명하자면, 경고 모듈을 가져올 필요는 없습니다.Python의 플래그로 "-W error"(또는 무시)를 사용하여 스크립트를 실행하면 됩니다.
MySQL의 SHOW WARNES 명령어를 사용해보셨습니까?
MySQLdb 사용을 중지합니다. 데이터를 잘라내고 경고만 하는 바보 같은 행동을 합니다.대신 우리의 SQL을 사용합니다.
언급URL : https://stackoverflow.com/questions/2102251/trapping-a-mysql-warning
'programing' 카테고리의 다른 글
제약 조건 위반 시 사용자 친화적 오류 메시지를 제공할 수 있는 방법이 있습니까? (0) | 2023.09.10 |
---|---|
json 또는 html 파일을 사용하여 jQuery ajax를 사용하여 테이블 자동 새로 고침/업데이트 (0) | 2023.09.10 |
부트스트랩 3 Navbar(로고 포함) (0) | 2023.09.10 |
필드를 증가시킬 때 MySQL 데이터베이스에 레이스 조건이 없는지 확인하는 방법은 무엇입니까? (0) | 2023.09.10 |
모든 개발자가 데이터베이스에 대해 알아야 할 사항은 무엇입니까? (0) | 2023.09.10 |