2010-03-30 6 views
1

나는 제공된 전자 메일 주소 또는 사용자 ID (정수)를 사용하여 데이터베이스에서 사용자를 끌어낼 수 있기를 원합니다. 이렇게하려면 제공된 문자열이 정수인지 아니면 전자 메일인지를 감지해야합니다. 가장 빠른 방법을 찾고 있습니다. 감사.python에서 문자열이 전자 메일인지 정수인지를 확인하는 가장 빠른 방법은 무엇입니까?

def _fetchInfo(self, data): 
    try: 
     data=int(data) 
     sql='SELECT ... WHERE id = %s' 
     args=[data] 
    except ValueError: 
     sql='SELECT ... WHERE email = %s' 
     args=[data] 
     # This might fail, in which case, data was neither a valid integer or email address 

이 전략은 또한 모니 커 "It is Easier to Ask for Forgiveness than Permission"에 의해 진행됩니다

def __init__(self, data): 
    #populate class data 
    self._fetchInfo(data) 


def _fetchInfo(self, data): 
    #If an email 
     #SELECT ... WHERE email = 'data' 
    #or if a user_id 
     #SELECT ... WHERE id = 'data' 

    #Fill class attributes 
    self._id = row['id'] 
    self._email = row['id'] 
    ... 
+0

사용 정규 표현식 http://docs.python.org/library/re.html#re-syntax – vittore

답변

4

파이썬에서이 문제를 처리하는 표준 방법은 첫 번째 시도 나중에 용서를 요청하는 것입니다. 작동 방법은 그것이 명확하게하기 위해, 난 그냥 두 가지 방법, fetchByIdfetchByEmail이있을 것이다

if isinstance(data, int): 
    # it's an id 
else: 
    # it's a string 

개인적으로 비록 :

+2

하하하 .. 그 시도하고 캐치 – Anurag

+1

유효성을 검사해야합니다 모든 학교에서 가르쳐야한다 방법 문자열을'SELECT' 문에 넣기 전에 입력하십시오. –

+0

"Little Bobby Tables": http://xkcd.com/327/ –

2

당신은 isinstance 기능을 사용할 수 있습니다.

+1

isinstance는 작동하지 않습니다. "제공된 ** 문자열 **을 감지해야합니다."- 항상 인스턴스가됩니다. str. – detly

+0

오오 그렇습니다. 지금은 ...이 경우, ~ unutbu의 대답은 여전히 ​​유효합니다. –

2

둘 다 문자열이라고 했지요? 이것도 효과가 있습니다.

if data.isdigit(): 
    # it's an id 
else: 
    # it's not 
+0

정수가 음수 일 수있는 경우 작동하지 않습니다. – dan04

+2

@ dan04 사실, 자동 증가 db id는 일반적으로 음수가 아닙니다. –

1
if '@' in data: 
    # email 
else: 
    # id 
관련 문제