2012-11-15 5 views
3

파이썬에 대한 새로운 소식과 그것을 좋아하고, 이것이 단순한 것이라고 생각합니다.
저는 현재 pymssql의 도움으로 파이썬 스크립트를 통해 SQL Server 2008에 포인트를 삽입하고 있습니다.SQL Server에 포인트를 삽입 하시겠습니까?

var1 = "hi" 
lat = "55.92" 
lon = "-3.29" 

cursor.execute("INSERT INTO table (field1, x, y) VALUES(%s, %s, %s)", 
(var1 , lat, lon)) 

이 모든 것이 정상적으로 작동합니다. 그 좌표를 GEOGRAPHY type 필드 (geog)에 삽입해야합니다.

geog_type = "geography::STGeomFromText('POINT(%s %s)',4326))" % (lat, lon) 

cursor.execute("INSERT INTO table (field1, x, y, geog) VALUES(%s, %s, %s, %s)", 
(var1 , lat, lon, geog_type)) 

이 다음과 같은 예외가 발생합니다 :

레이블 지리 :: STGeomFro 텍스트 (WKT) 잘 알려진 입력에 유효하지 입니다. 유효한 레이블은 POINT, LINESTRING, POLYGON, MULTIPOINT, 다중 행, 다중 폴리곤, 기하 수집, 순환 선, COMPOUNDCURVE, CURVEPOLYGON 및 FULLGLOBE입니다 (지리 데이터 유형만 해당).

SSMS에서 포인트를 삽입하기 위해 테이블에 insert 문을 실행할 수 있습니다.

USE [nosde] 
INSERT INTO tweets (geog) 
    VALUES(
     geography::STGeomFromText(
     'POINT(55.9271035250276 -3.29431266523898)',4326)) 

자세한 내용이 필요한 경우 알려 주시기 바랍니다.

my workings on pastebin.

+0

전체 오류 메시지입니까? 그렇다면 오류가 "geography :: STGeomFromText"가 아닌 "geography :: STGeomFro"에 대해 불평하고 있으므로 실행 된 SQL에서 geog_type이 잘 리면 – Talvalin

+0

문자열이 정확합니다. 다른 곳에 잘 렸습니다. http://pastebin.com/D5twLB5h – Simon

답변

2

여러 문제의 일부 - 첫째, 당신이 잘못된 순서로 좌표를 공급하고 있습니다 - STPointFromText() 메소드는 우선, 다음 위도 경도 기대하고있다.

두 번째로 문자열 조작을 필요로하지 않는 STPointFromText() 메서드 대신 Point() 메서드를 사용하는 것이 더 쉽습니다. 두 개의 숫자 좌표 매개 변수를 직접 입력하면됩니다. http://technet.microsoft.com/en-us/library/bb933811.aspx

하지만 오류 메시지에서 보낸 값이 WKT 문자열로 구문 분석되고있는 것 같습니다. 이 경우 추가 지형 :: STGeomFromText 및 끝에있는 SRID는 필요하지 않습니다. 이는 가정됩니다. 첫 번째 라인 여부에 여분의 작은 따옴표를 필요로하는 경우

geog_type = "'POINT(%s %s)'" % (lon, lat) 

cursor.execute("INSERT INTO table (field1, x, y, geog) VALUES(%s, %s, %s, %s)", 
(var1 , lat, lon, geog_type)) 

잘 모르겠어요,하지만 순간에 테스트 할 수있는 시스템이없는 : 그래서 공급 단지보십시오.