Python 은 TXT 파일 데 이 터 를 읽 고 내 장 된 데이터베이스 SQLite 3 에 저장 하 는 방법 을 실현 합 니 다.

9824 단어 PythonTXTSQLite3
이 사례 는 Python 이 TXT 파일 데 이 터 를 읽 고 내 장 된 데이터베이스 SQLite 3 에 저장 하 는 방법 을 설명 한다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
TXT 파일 이 너무 크 고 컴퓨터 메모리 가 부족 할 때 우 리 는 줄 별로 TXT 파일 을 읽 고 Python 에 경량급 splite 데이터 베 이 스 를 저장 할 수 있 습 니 다.그러면 데이터 의 읽 기 속 도 를 가속 화 할 수 있 습 니 다.우리 가 데 이 터 를 반복 적 으로 읽 어야 할 때 이런 속도 가 빨 라 지면 가 져 오 는 시간 을 절약 하 는 것 이 매우 좋 습 니 다.예 를 들 어 우리 가 데 이 터 를 훈련 할 때 10 만 번 을 교체 해 야 합 니 다.파일 에서 10 만 번 을 읽 어야 한 다 는 것 이다.매번 0.1 초 만 속 도 를 내 더 라 도 몇 시간 은 절약 할 수 있다.

#       txt          
import sqlite3      #  sqlite3
cx = sqlite3.connect('./train.db')  #     ,         ,      ;        ,       ,       。
cu = cx.cursor()           #      ,        。
cu.execute('create table if not exists train4 (id integer primary key,name text)')  #   
fr = open('data_sample.txt')    #      txt  
i = 0
for line in fr.readlines():    #            train4 。
  cu.execute('insert into train4 values(?,?)',(i,line))
  i +=1
cu.close()   #    
cx.commit()   #    
cx.close()   #     

조회 데이터:

cu.execute('select * from train4 where id = ?',(i,)) #i       train4       
result = cu.fetchall()

주:앞에서 데이터 베 이 스 를 닫 았 다 면 조회 할 때 데이터 베 이 스 를 다시 열 고 커서 를 만들어 야 합 니 다.이 점 은 주의해 야 한다.
전체 검색 프로그램 은 다음 과 같 습 니 다.

import sqlite3
cx = sqlite3.connect('./train.db')
cu = cx.cursor()
for i in range(5):
  cu.execute('select * from train4 where id = ?',(i,))
  result = cu.fetchall()
  cx.commit()
cu.close()
cx.close()

또한,SQLite 3 데이터 조작 류 를 추가 하여 참고 하 시기 바 랍 니 다.

import sqlite3
# ***************************************************
# *
# * Description: Python  SQLite3      (     )
# * Author: wangye
# *
# ***************************************************
def _wrap_value(value):
  return repr(value)
def _wrap_values(values):
  return list(map(_wrap_value, values))
def _wrap_fields(fields):
  for key,value in fields.items():
    fields[key] = _wrap_value(value)
  return fields
def _concat_keys(keys):
  return "[" + "],[".join(keys) + "]"
def _concat_values(values):
  return ",".join(values)
def _concat_fields(fields, operator = (None, ",")):
  if operator:
    unit_operator, group_operator = operator
  # fields = _wrap_fields(fields)
  compiled = []
  for key,value in fields.items():
    compiled.append("[" + key + "]")
    if unit_operator:
      compiled.append(unit_operator)
      compiled.append(value)
    compiled.append(group_operator)
  compiled.pop() # pop last group_operator
  return " ".join(compiled)
class DataCondition(object):
  """
          SQL             
      :
    DataCondition(("=", "AND"), id = 26)
    DataCondition(("=", "AND"), True, id = 26)
  """
  def __init__(self, operator = ("=", "AND"), ingroup = True, **kwargs):
    """
          
        :
        operator    ,  (      ,      )
        ingroup     ,    ,      
        kwargs      ,            
                            SQL    
                   operator[0]   
        :
      DataCondition(("=", "AND"), id = 26)
      (id=26)
      DataCondition((">", "OR"), id = 26, age = 35)
      (id>26 OR age>35)
      DataCondition(("LIKE", "OR"), False, name = "John", company = "Google")
      name LIKE 'John' OR company LIKE "Google"
    """
    self.ingroup = ingroup
    self.fields = kwargs
    self.operator = operator
  def __unicode__(self):
    self.fields = _wrap_fields(self.fields)
    result = _concat_fields(self.fields, self.operator)
    if self.ingroup:
      return "(" + result + ")"
    return result
  def __str__(self):
    return self.__unicode__()
  def toString(self):
    return self.__unicode__()
class DataHelper(object):
  """
    SQLite3        
  """
  def __init__(self, filename):
    """
          
        : filename  SQLite3       
    """
    self.file_name = filename
  def open(self):
    """
                
    """
    self.connection = sqlite3.connect(self.file_name)
    self.cursor = self.connection.cursor()
    return self
  def close(self):
    """
           ,           ,
                  
    """
    if hasattr(self, "connection") and self.connection:
      self.connection.close()
  def __del__(self):
    """
          ,       
    """
    self.close()
  def commit(self):
    """
          
      SELECT        ,   execute   
      commit_at_once  True        ,
                  。
    """
    self.connection.commit()
  def execute(self, sql = None, commit_at_once = True):
    """
        SQL  
        :
        sql     SQL  ,  None,         SQL  。
        commit_at_once         ,       ,
               ,     commit    。
    """
    if not sql:
      sql = self.sql
    self.cursor.execute(sql)
    if commit_at_once:
      self.commit()
  def fetchone(self, sql = None):
    """
           
    """
    self.execute(sql, False)
    return self.cursor.fetchone()
  def fetchall(self, sql = None):
    """
           
    """
    self.execute(sql, False)
    return self.cursor.fetchall()
  def __concat_keys(self, keys):
    return _concat_keys(keys)
  def __concat_values(self, values):
    return _concat_values(values)
  def table(self, *args):
    """
            ,         
    """
    self.tables = args
    self.tables_snippet = self.__concat_keys(self.tables)
    return self
  def __wrap_value(self, value):
    return _wrap_value(value)
  def __wrap_values(self, values):
    return _wrap_values(values)
  def __wrap_fields(self, fields):
    return _wrap_fields(fields)
  def __where(self):
    # self.condition_snippet
    if hasattr(self, "condition_snippet"):
      self.where_snippet = " WHERE " + self.condition_snippet
  def __select(self):
    template = "SELECT %(keys)s FROM %(tables)s"
    body_snippet_fields = {
      "tables" : self.tables_snippet,
      "keys" : self.__concat_keys(self.body_keys), 
    }
    self.sql = template % body_snippet_fields
  def __insert(self):
    template = "INSERT INTO %(tables)s (%(keys)s) VALUES (%(values)s)"
    body_snippet_fields = {
      "tables" : self.tables_snippet,
      "keys" : self.__concat_keys(list(self.body_fields.keys())),
      "values" : self.__concat_values(list(self.body_fields.values()))
    }
    self.sql = template % body_snippet_fields
  def __update(self):
    template = "UPDATE %(tables)s SET %(fields)s"
    body_snippet_fields = {
      "tables" : self.tables_snippet,
      "fields" : _concat_fields(self.body_fields, ("=",","))
    }
    self.sql = template % body_snippet_fields
  def __delete(self):
    template = "DELETE FROM %(tables)s"
    body_snippet_fields = {
      "tables" : self.tables_snippet
    }
    self.sql = template % body_snippet_fields
  def __build(self):
    {
      "SELECT": self.__select,
      "INSERT": self.__insert,
      "UPDATE": self.__update,
      "DELETE": self.__delete
    }[self.current_token]()
  def __unicode__(self):
    return self.sql
  def __str__(self):
    return self.__unicode__()
  def select(self, *args):
    self.current_token = "SELECT"
    self.body_keys = args
    self.__build()
    return self
  def insert(self, **kwargs):
    self.current_token = "INSERT"
    self.body_fields = self.__wrap_fields(kwargs)
    self.__build()
    return self
  def update(self, **kwargs):
    self.current_token = "UPDATE"
    self.body_fields = self.__wrap_fields(kwargs)
    self.__build()
    return self
  def delete(self, *conditions):
    self.current_token = "DELETE"
    self.__build()
    #if *conditions:
    self.where(*conditions)
    return self
  def where(self, *conditions):
    conditions = list(map(str, conditions))
    self.condition_snippet = " AND ".join(conditions)
    self.__where()
    if hasattr(self, "where_snippet"):
      self.sql += self.where_snippet
    return self
파 이 썬 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있다.
본 논문 에서 말 한 것 이 여러분 의 Python 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기