2016-07-01 2 views
0

NGS 시퀀싱 결과를 저장할 데이터베이스를 만들었습니다. 모든 정보를 저장하는 17 개의 테이블로 구성됩니다. 결과는 스프레드 시트에 저장되어 파이썬 (2.7)을 사용하여 변수를 저장하고 변수를 저장 한 다음 파이썬 패키지 mysqldb를 사용하여 데이터베이스에 데이터를 삽입합니다. 주로 변수에서 필요한 정보를 얻기 위해 함수를 사용하고,이 함수를 호출하기 위해 'try :'문을 삽입하는 루프를 작성합니다. 다음은 간단한 예입니다.MySQL 데이터베이스 삽입 프로그램에 파이썬 클래스를 사용해야합니까?

def sample_processer(file): 
    my_file = open(file, 'r+') 
    samples = [] 
    for line in my_file: 
     ...get info... 
     samples.append(line[0]) 
    return(samples) 

samples = sample_processor('path/to/file') 

for sample in samples: 
    try: 
     sql = "samsql = "INSERT IGNORE INTO sample(sample_id, diagnosis, screening) VALUES (" 
     samsql = samsql + "'"+sample+"'," +sam_screen_dict.get(sample)+"')" 
    except e: 
     db.rollback() 
     print("Something went wrong inserting data into the sample table: %s" %(e)) 

* sam_screen_dict는 다른 기능으로 만든 사전입니다.

이 파일은 내가 업로드 한 간단한 테이블이지만 많은 사람들이 올바른 사전 결과를 업로드하기 위해 다른 사전을 호출합니다. 그러나 클래스를 사용하여이를 수행하는 더 강력한 방법이 있는지 궁금해하고있었습니다.

예를 들어, 내 sample_id에는 샘플 테이블에 관련 선별 속성이 있으므로 하나의 사전으로 쉽게 처리 할 수 ​​있습니다. sample_id, experiment_id 및 발견 된 돌연변이가 다른 데이터와 함께 저장된 테이블과 같은 더 복잡한 접합 테이블을 가지고 있는데이 테이블에 대한 클래스를 만드는 것이 좋을 것입니다. 간단한 '샘플'클래스를 호출하여 에서 상속? 그 방법은 내가 삽입 된 결과가 올바른 샘플/실험 등을위한 것임을 항상 알게 될 것입니다.

또한 클래스를 사용하여 각 속성에 대한 규칙을 작성하여 원본 스프레드 시트가 어떤 이유로 부정확 한 경우 데이터베이스에 삽입하지 않습니까? 예 : sample_id의 형식은 A123/16입니다. 따라서 클래스를 사용하면 첫 번째 문자가 'A'이고 sample_id [-3]이 항상 == '/'이어야 함을 확인할 것입니다. 나는 이것을 함수에 쓸 수 있다는 것을 알고 있지만 너무 많은 공간과 시간을 써서 많은 'if'문을 쓰는 것처럼 느껴진다. 클래스에 한 번 저장하면 훨씬 더 좋을 것이다.

누구나 클래스를 사용하여 변수를 통과하여 삽입 단계에 도달하고 오류가 생성되기 전에 올바른지 테스트하는 사람이 있습니까?

저는 파이썬 클래스에 익숙하지 않고 기초 지식을 이해하고 있으며, 여전히 올바른 방향으로 나아갈 수 있도록 노력하고 있습니다. 실제로 파이썬 코드를 작성하는 법에 대한 도움이 될 것입니다 보다 견고한 데이터베이스 삽입 프로그램을 만드는 데 사용될 클래스입니다.

+2

, 아마도 SQLAlchemy의 시도? – jonrsharpe

답변

0

17 테이블 약 17 개의 클래스를 사용할 수 있습니다. 간단한 스크립트를 사용하십시오. webpy.db https://github.com/webpy/webpy/blob/master/web/db.py 단지 몇 개의 코드 만 수정하십시오. 그런 다음 webpy api : http://webpy.org/docs/0.3/api#web.db을 사용하여 작업을 완료 할 수 있습니다.

가 당신을 위해 유용 희망

당신이 (관계형 매퍼 객체)는 ORM을 찾고있는 것 같습니다
관련 문제