2017-02-07 2 views
1

질문 : 아래 코드에서 주어진 날짜/시간 값을 MS SQL 서버에 어떻게 삽입합니까?SQL 테이블에 미리 지정된 datetime 값 삽입

상황 :

가 나는이 프로젝트를 위해 마이크로 소프트 SQL 서버 2008의 테이블에 업로드 할 것을 파이썬 (목록 즉, 목록) 2-D의 목록을 가지고 I Python의 pymssql 패키지를 사용하고 있습니다. 각 목록의 각 값은 datetime 값인 첫 번째 요소를 제외한 문자열입니다.

import pymssql 

db_connect = pymssql.connect(# these are just generic names 
    server = server_name, 
    user = db_usr, 
    password = db_pwd, 
    database = db_name 
    ) 

my_cursor = db_connect.cursor() 
for individual_list in list_of_lists: 
    # the first value in the paranthesis should be datetime 
    my_cursor.execute("INSERT INTO [DB_Table_Name] VALUES (%s, %s, %s, %s, %s, %s, %s, %s)", tuple(individual_list)) 
    db_connect.commit() 

파이썬 인터프리터 내 날짜 시간 값을 삽입하는 힘든 시간을 보내고있다 : 여기 내 코드 읽기 방법이다. 나는 현재 %s을 가지고 있고 그것이 문자열 포맷터라는 것을 알고 있지만, datetime에 사용해야하는 것이 확실하지 않습니다. 이것은 데이터베이스의 첫 번째 열의 형식입니다. (각 목록은 터플로 변환 후)

은 "목록의 목록"은 다음과 같습니다

+-----------+------+------+--------+-------+-----------+---------+---------+ 
| date | step | data | type | ID | contact | notif. | program | 
+-----------+------+------+--------+-------+-----------+---------+---------+ 
|2012-04-01 | 1 | 4.1 | hip | A1 | J. Smith | B123 | XYZ | 
|2012-09-05 | 2 | 5.1 | hip | A9 | B. Armst | B123 | ABC | 
|2012-01-16 | 5 | 9.0 | horray | C6 | F. Bayes | P995 | XYZ | 
+-----------+------+------+--------+-------+-----------+---------+---------+ 

: 여기

[(datetime.datetime(2012, 4, 1), '1', '4.1', 'hip', 'A1', 'J. Smith', 'B123', 'XYZ'),...] 

테이블이 어떻게 보일지의 그림입니다 미리 감사드립니다.

+0

테이블의 열과 목록의 샘플 데이터를 표시 할 수 있습니까? –

+0

@vkp 위의 수정 사항을 참조하십시오 .- 감사합니다! – daOnlyBG

+0

코드가 적당 해 보입니다. 문제가 어떻게 나타나고 있습니까? 에러 메시지? 예기치 않은 날짜 값이 삽입 되었습니까? ...? –

답변

0

삽입하기 전에 "yyyymmdd hh : mm : ss"로 날짜 시간을 포맷 해보십시오. 당신이하고있는 일로 SQL이 문자열을 파싱 할 것이므로 전체 문자열을 만든 다음 그 문자열을 변수로 삽입 할 것입니다. 아래 참조

for individual_list in list_of_lists: 
    # the first value in the parentheses should be datetime 
    date_time = individual_list[0].strftime("%Y%m%d %H:%M:%S") 
    insert_str = "INSERT INTO [DB_Table_Name] VALUES (" + str(date_time) + "),(" + str(individual_list[1]) + ");" 
    print insert_str 
    my_cursor.execute(insert_str) 
    db_connect.commit() 

조잡한 비단뱀에 사과하지만 SQL은 모든 필드가 일치하는 한 그 insert 문과 같아야합니다. 그렇지 않은 경우 insert 문에서 해당 값의 필드를 지정해야 할 수 있습니다.

작동하는지 알려주세요.

+0

이것은 웹 스크래핑 프로젝트의 일부입니다. 이미 문자열 형식의 날짜가 있습니다. 문제는 내가 작업하고있는 데이터베이스가'datetime'으로 포맷 된 날짜 열을 가지고 있다는 것입니다. datetime 형식 값을 업로드 할 방법이 없다면 새로운 데이터베이스 열을 "varchar"로 만들고 문자열로 업로드해야합니다. 문자열이 아니라 datetime 값으로 값을 업로드하는 방법이 있는지 궁금합니다. – daOnlyBG

+1

맞습니다. 내가 파이썬 날짜 시간 객체를 SQL 필드에 추가하는 방법을 알 수 없다. SQL이 삽입 문자열에서 인식하는 날짜 형식이어야합니다. –

+1

(cc : @daOnlyBG)이를 수행하는 방법은 * 매개 변수화 된 쿼리 *를 사용하는 것입니다. : crsr.execute ("UPDATE table1 SET dtmcol = % s WHERE ID = % s", (datetime.datetime (2012, 11, 10), 3))' –