2016-07-02 5 views
-2

저는 SQL 코드 문자열 (즉, SQLalchemy와 같은 ORM을 사용하지 않고)을 실행하여 SQLite를 직접 사용하는 Python 3 응용 프로그램을 가지고 있습니다. 데이터베이스는 다음과 같이 초기화되고 : 예 import pymysql를 들어,이 SQLite 기반 Python 코드가 MySQL과 호환됩니까?

def db_update_estado(info): 
    global DB_PATH 
    estado = verificar_estado(info) 
    if estado != "- N/A -": 
     estado_detalhado = obter_estado_detalhado(info) 
     agora = datetime.now() 
     try: 
      conn = sqlite3.connect(DB_PATH) 
      c = conn.cursor() 
      c.execute("""UPDATE dados SET estado = ?, estado_detalhado = ?, data_ult_verif = ? WHERE obj_num = ?;""", (estado, estado_detalhado, agora, remessa)) 
      conn.commit() 
      c.close() 
     except: 
      print(" - It was not possible to update this register in the database!") 

사용하는 것이 안전한가요 데이터베이스 연결을 조정 :이 같은

def db_inicialize(): 
    global DB_PATH 
    print(" - Opening database...\n", DB_PATH) 
    conn = sqlite3.connect(DB_PATH, detect_types=sqlite3.PARSE_DECLTYPES) 
    c = conn.cursor() 
    print(" - Locating or creating database...") 
    try: 
     c.execute("""CREATE TABLE IF NOT EXISTS dados (
       id    INTEGER PRIMARY KEY AUTOINCREMENT, 
       destin   TEXT NOT NULL, 
       estado   TEXT, 
       obj_num   TEXT UNIQUE NOT NULL, 
       data_exp   DATETIME, 
       valor_cobr  TEXT, 
       chq_recebido  TEXT, 
       data_depositar TEXT, 
       vols    INTEGER, 
       rma    TEXT, 
       expedidor   TEXT NOT NULL, 
       obs    TEXT, 
       arquivado   BOOLEAN, 
       data_depositado DATETIME, 
       data_ult_verif DATETIME, 
       data_ult_alt  DATETIME DEFAULT CURRENT_TIMESTAMP, 
       estado_detalhado TEXT 
       )""") 
    except: 
     print(" - It was not possible to create the main table in database.") 
     return False 
    conn.commit() 
    c.close() 

그럼 난 실행하고 코드는 데이터베이스에 상황을 타개하기 위해 진술 및 모든 SQL 관련 코드를 유지? 아니면 모든 SQL 코드를 수정하고 테이블 초기화에서 데이터 유형을 변경해야합니까?

답변

1

댓글이 너무 깁니다.

MySQL과 SQLite는 다른 데이터베이스입니다. 그것들은 많은 공통점을 가지고 있기 때문에 신중할 경우 양쪽 모두에서 작동 할 수있는 코드를 얻을 수 있습니다. 그러나 나는 그것에 대해 계획하지 않을 것이다.

예를 들어 create table 문은 text unique입니다. 이것은 MySQL에서 지원되지 않습니다. varchar(xxx)을 사용해야 할 것입니다. 여기서 xxx는 어떤 값보다 작습니다 (실제 최대 255를 사용합니다).

날짜/시간 값 처리에는 많은 차이가 있습니다. 예를 들어, curdate()date('now')과 다른 기능들도 많이 다릅니다. SQLite는 CTE를 지원합니다. MySQL은 그렇지 않습니다.

고유 한 모듈에 데이터베이스 기반 기능을 구축하는 것이 좋습니다. 또는 팬더와 같은 공통 인터페이스를 사용하십시오.

+0

실제로 코드를 MySQL로 포팅하기 전에 좀 더 살펴 보겠습니다. –