2017-11-06 13 views
0

저는 SQL 서버 스튜디오뿐만 아니라 파이썬도 처음 사용합니다. 나는 파이썬에서 인터넷에서 데이터를 수집하는 스크랩 핑 코드를 가지고 있으며, 판다 데이터 프레임에 저장하여 결국 CSV에 데이터를 씁니다. 한 번에 100 개의 행을 긁어서 csv에 저장합니다. 나는 함께 추가 한 100 개의 CSV 파일을 얻고 하나의 큰 파일로 변환합니다. 나는 100 개의 개별 csv가 필요하다.가져 오기 마법사를 통해 SQL 서버 스튜디오에로드하기위한 팬더 데이터 프레임

이제 병합 CSV를 SQL Server 관리 스튜디오에로드 할 때 가져 오기 마법사를 통해 자름 오류가 발생합니다. 체크하고 문자열 길이가 256자를 넘는 열이있는 몇 개의 행을 찾았습니다.

해결 방법이 있습니까? 대안은 내가 문자 길이를 256 자로 제한하는 것이 었습니다. csv로 내보내는 동안 (최적의 해결책은 아니지만 나에게 도움이 될 것입니다), csv에 팬더 데이터 프레임을 쓰는 동안 어떻게 할 수 있습니까? 다른 형식으로 저장할 수 있으며 Windows 가져 오기 마법사를 통해로드 할 수 있습니다.

내가 데이터베이스와 파이썬에 정말 익숙하다면 도움을받을 수있을 것입니다. 미리 감사드립니다.

답변

0

데이터베이스 테이블에 데이터를 추가하거나 바꿀 수있는 SQLAlchemy API에 팬더의 메서드를 쌓아 두는 것이 좋습니다. SQLAlchemy는 표준 Python-SQL 서버 DB-API (예 : pyodbc 또는 pymssql)와의 인터페이스를 제공합니다. 따라서 사용하기 전에 설치하십시오.

import pyodbc 
import sqlalchemy 

engine = sqlalchemy.create_engine("mssql+pyodbc://user:[email protected]/database", echo=False) 

mydataframe.to_sql('mytable', con=engine, if_exists='replace') 

engine.dispose() 

다양한 가져 오기 마법사와 달리이 방법은 팬더 데이터 프레임과 SQL Server 데이터베이스 테이블간에 직접 SQL 연결을 수행합니다. 으로 교환, 방법은 실제로 결국 INSERT INTO ... 팬더 dataframe의 데이터 유형을 사용하여, 다음 DROP TABLE ..., CREATE TABLE ... 실행 또는 to_sqlDTYPE의 사용자에 의해 지정된 인수.

+0

제 경험상 유일한주의 사항은 직접적인 to_sql 메서드가 작은 데이터 세트에만 적합하다는 것입니다. 큰 항목 집합 (> 10000 행)이되면 to_sql은 오랜 시간이 걸립니다. 동일한 방법을 사용하여 CSV 파일로 덤프하는 것을 선호했지만 to_csv 메서드를 사용하고 데이터베이스 가져 오기 도구를 사용하여 데이터베이스와 같은 네트워크의 위치에서 CSV 파일을 가져 왔습니다. – dg3781

+0

@Parfait 필자는 사용자 이름, 서버 등을 전달할 때와 같이 예제와 함께 전달해야하는 인수를 확인할 수 있습니까? 맞습니다 ("mssql + pyodbc : // my_user_name : my_password @ my_server/"MY_DATABASE, if_exists는 =) '대신' 내가 내 데이터베이스 및 테이블 이름이 올 것으로 보이는 –

+0

동일 할) = 거짓 다음 mydataframe.to_sql ('MY_DATABASE', 사기꾼 = 엔진을 에코. 시도해보고 다시보고하십시오. 그러나 데이터베이스에는 덤프하지 않지만 데이터베이스 테이블에는 덤프하지 않습니다. 따라서 * my_database *는 * my_table *이어야합니다. – Parfait