파이썬 스크립트를 사용하여 csv 파일을 MySQL 데이터베이스로 가져 오려고합니다. 자동으로 실패하는 것 같습니다.Python : MySQLdb LOAD DATA INFILE가 자동으로 실패 함
#!/usr/bin/python
import MySQLdb
class DB:
host = 'localhost'
user = 'root'
password = '**************'
sqldb = 'agriculture'
conn = None
def connect(self):
self.conn = MySQLdb.connect(self.host,self.user,self.password,self.sqldb)
def query(self, sql, params=None):
try:
cursor = self.conn.cursor()
if params is not None:
cursor.execute(sql, params)
else:
cursor.execute(sql)
except (AttributeError, MySQLdb.OperationalError):
self.connect()
cursor = self.conn.cursor()
if params is not None:
cursor.execute(sql, params)
else:
cursor.execute(sql)
print vars(cursor)
return cursor
def load_data_infile(self, f, table, options=""):
sql="""LOAD DATA LOCAL INFILE '%s' INTO TABLE %s FIELDS TERMINATED BY ',';""" % (f,table)
self.query(sql)
db = DB()
pathToFile = "/home/ariggi/722140-93805-sqltest.csv"
table_name = "agriculture.degreedays"
db.load_data_infile(pathToFile, table_name)
나는 "쿼리()"메소드 내 화면에 커서 오브젝트를 덤프하고이 상황을 디버깅하기위한 시도 :
여기 내 코드입니다. 여기에서의 출력은 :
{ '_result'없음 '설명'없음 'ROWNUMBER'0 '메시지'[] 가 '_executed' "로드 DATA LOCAL INFILE 를 '/ ',', 'rowcount': 500L, 'connection': 'description_flags': 없음, ' 0 ','lastrowid ': 0L,'_last_executed ': "LOAD DATA LOCAL INFILE'/ home/ariggi/722140-93805 : 배열 크기 : 1, '_info': '레코드 : 500 삭제됨 : 0 건너 뛴 : 0 경고 : -sqltest.csv 'INTO TABLE agriculture.degreedays 필드 종료', ';', '_ 경고': 0, '_rows':()}
01 23,516,
나는
LOAD DATA LOCAL INFILE '/home/ariggi/722140-93805-sqltest.csv' INTO TABLE agriculture.degreedays FIELDS TERMINATED BY ',';
이며 예상 행이 테이블을 채 웁니다대로 작동 MySQL의 콘솔을 통해 그것을 실행 "_last_executed"쿼리를 취합니다. 그러나이 스크립트를 실행하면 데이터베이스 테이블이 비어 있습니다.
나는 꽤 난처하고 약간 도움을 사용할 수 있었다.
그랬습니다. 감사! 나는 커밋 선언문없이 일찍 작업했기 때문에 지금은 더 혼란 스럽다. 커밋없이 2 개의 쿼리를 실행하면 두 번째 쿼리가 첫 번째 쿼리를 커밋합니까? –
@Mike'with conn as cursor :'를 사용하면 모듈은'with' 블록 내부에서 사용할 커서를 제공하고 블록을 종료 할 때 커밋합니다. – Air
큰 제안! 나는 당신이 내 대답에 그것을 (자연스럽게 신용으로) 포함시키는 것을 꺼리지 않기를 바란다. – holdenweb