2017-02-14 4 views
1

저는 파이썬을 처음 접했고 파이썬을 사용하여 터플의 각 항목에 대해 SQL 쿼리를 수행하는 방법을 알아 내려고 노력하고 있습니다.튜플의 각 항목에 대해 SQL 쿼리 수행하기

나는 배지 리더 시스템을위한 여러 데이터베이스를 포함하는 SQL Express 서버를 보유하고 있습니다. 내가 뭘 하려는지 특정 리더로 스캔 한 사용자의 ID를 당긴 다음, 그 ID를 사용하여 실제 사용자 이름을 얻는다.

현재 사용자 ID를 가져 와서 하나의 ID 만 사용하여 다른 테이블에서 쿼리를 실행할 수 있습니다. 할 수 있기를 원하는 것, 그리고 알아내는 문제가있는 것처럼 보이는 것은 첫 번째 쿼리에서 생성 된 튜플의 모든 사용자 ID에 대해 두 번째 쿼리를 실행하고있는 것입니다. 아래는 현재 사용하고있는 두 가지 기능에 대한 코드입니다.

def get_id(): 
global cardholder 
global cur 

cur.execute("SELECT user_id FROM db.table WHERE badgereaderid = 'badgereader1'") 

cardholder = [] 
rows = cur.fetchall() 
for row in rows: 
    if row == None: 
     break 
    cardholder.append(row[0]) 

print(cardholder) 

def get_name(): 
global cardholder 
global user 
global cur 

cur.execute("SELECT FirstName, LastName FROM db.table WHERE user_id= '%s'" % cardholder) 

while 1: 
    row = cur.fetchone() 
    if row == None: 
     break 
    user = row[0] + row[1] 
+0

할 수 있습니다'cardholder' ...을 제외하고 돌이 : 어떤 모듈을 사용하면 SQL Server Express에 연결하는 데 사용하는? – bernie

+0

pyodbc를 사용하고 있습니다. – mtnbiker1185

+1

그 경우에는'% s' 대신'?'를 사용하고 두 번째 인수로 값을 전달하십시오 (그리고 iterable인지 확인하십시오). .execute()'... – bernie

답변

1

두 가지 옵션

for user_id in cardholder: 
    cur.execute("SELECT FirstName, LastName FROM db.table WHERE user_id= '%s'" % user_id) 

그런데 왜 그냥 첫 번째 쿼리의 모든 데이터를 당기지 파이썬

에서

반복 쿼리?

cur.execute("SELECT a.user_id, b.FirstName, b.LastName FROM db.table1 a left join bd.table2 b on a.user_id = b.user_id WHERE a.badgereaderid = 'badgereader1'") 

또는,

cur.execute("""SELECT 
a.user_id, 
b.FirstName, 
b.LastName 
FROM db.table1 a 
left join db.table2 b 
on a.user_id = b.user_id 
WHERE a.badgereaderid = 'badgereader1'""") 
+0

명확한. 첫 번째 쿼리는 한 데이터베이스의 테이블에 있고 두 번째 쿼리는 다른 데이터베이스의 다른 테이블에 있습니다. – mtnbiker1185

+0

신경 쓰지 마라, 나는 네가하는 말을 보았고 그것이 효과가 있었다. 고맙습니다. – mtnbiker1185

1

파이썬에서 좋은 연습은 당신이하고자하는 경우 함수 외부 데이터 컬렉션을 정의하는 것입니다 이해하는 여러 줄의 문자열을 허용하는 삼중 따옴표를 사용하여 SQL 명령을 쉽게 이 코드를 사용해보십시오 코드에서 나중에 사용할 수 있습니다 :

cardholder_names = [] 
#pass the cardholder as a param to the function 
def get_name(cardholder): 
#cur is already defined as a global param, no need to do it twice  
    cur.execute("SELECT FirstName, LastName FROM db.table WHERE user_id='{0}'".format(cardholder)) 
    return cur.fetchone() 


#now use the for loop to iterate over all the cardholders 
for holder in cardholders: 
    cardholder_name = get_name(holder) 
    cardholder_names.append({"name" : cardholder_name[0], "surname" : cardholder_name[1]}) 
관련 문제