2017-01-12 2 views
0

저는 Python 2.7을 사용하여 MS SQL 2012 DB에서 CRUD 작업을 수행하고 있습니다.Pymssql은 동적 열 이름이있는 사전 목록에서 multiple을 삽입합니다.

사전 목록 "NewComputers"(각 사전은 데이터베이스의 행)에 데이터가 저장되어 있습니다.

제대로 작동합니다. 그러나 소스 데이터 열 이름과 대상 열 이름은 모두 하드 코딩됩니다 (열 이름이 다르다는 점에 유의하십시오).

질문 : 데이터 원본 열 이름을 하드 코딩하는 대신 동적으로 열 이름을 확인하기 위해 사전을 반복 할 수 있습니까? 또한 대상 (데이터베이스 테이블) 열 이름을 하드 코딩하는 대신 동적으로 열 이름 목록을 반복 할 수 있습니까?

다른 데이터 원본 열과 대상 열에이 함수를 다시 사용할 수있게하려고합니다.

"INSERT INTO 컴퓨터 (열 이름의 매개 변수 목록) VALUES (값 매개 변수 목록)"여기

함수입니다 :

def insertSR(NewComputers): 
    conn = pymssql.connect(mssql_server, mssql_user, mssql_pwd, "Computers") 
    cursor = conn.cursor(as_dict=True) 
    try: 
     cursor.executemany("INSERT INTO Computer (ComputerID, HostName, Type) VALUES (%(computer_id)s, %(host_name)s, %(type)s)", NewComputers) # How to make the column names dynamic? 
    except: 
     conn.rollback() 
     print("ERROR: Database Insert failed.") 
    conn.commit() 
    print("Inserted {} rows successfully".format(cursor.rowcount)) 
    conn.close() 

답변

1

할 수 있습니다 '즉

네가하고 싶은 것을해라.

는 기본적으로, 당신의 여러 삽입 SQL 쿼리를로 변환 얻을 것이다 : 당신이 볼 수 그래서

insert into table (column1, column2, column3) values (a1,a2,a3), (b1,b2,b3) 

, 적어도 대상 컬럼 그룹 당 하나 개의 다른 쿼리를 확인해야합니다.

예를 들어, 데이터 소스 측에 (a1,a2,a3),(b1,b2,b3) 예에서 열 이름을 지정할 필요가 없으므로 주어진 대상에 대해 다른 데이터 소스를 사용할 수 있습니다. 이 부분에

, 나는 이런 식으로 뭔가를 할 거라고 :

첫째는 correspondance에의 딕셔너리를 구축, 키는 대상 필드의 이름이고, 값은 데이터 소스 테이블에이 분야에 사용되는 다른 이름입니다

source_correspondance = { 
      'ComputerID':['id_computer', 'computer_Id'], 
      'HostName': ['host', 'ip', 'host_name'], 
      'Type':['type', 'type'] 
} 

그런 다음 데이터 소스를 반복하고 열 이름을 귀하의 연락처 사전의 키로 대체하십시오.

마지막으로 검색어 (대상 '유형'당 1 개의 집행자)를 만들 수 있습니다.