2016-07-02 7 views
-2

私は、SQLコードを実行することによって(すなわち、SQLalchemyのようなORMを使わずに)SQLiteを直接使用するPython 3アプリケーションを持っています。データベースは次のように初期化されている:このSQLiteベースのPythonコードはMySQLと互換性がありますか?

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() 

その後、私はデータベースで物事を変更するには、このようなコードを実行しています:

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!") 

は、例えばimport pymysqlのために、データベース接続を調整し、使用することが安全ですステートメントとすべてのSQL関連のコードを保つ?または、私はすべてのSQLコードを変更する必要がありますか、テーブルの初期化でデータ型を変更...?

答えて

1

コメントが長すぎます。

MySQLとSQLiteは異なるデータベースです。彼らは多くの類似点を持っているので、あなたが慎重であれば、両方で動作するコードを得ることができるかもしれません。しかし私はそれについて計画しません。

例えば、create tableの文はtext uniqueとなります。これはMySQLではサポートされていません。 varchar(xxx)を使用する必要があります。ここで、xxxはある値よりも小さくなります(実用的な最大値は255です)。

日付/時刻値の処理には数多くの違いがあります。例えば、curdate()date('now')との間には、他の機能の点でも多くの相違点があります。 SQLiteはCTEをサポートしています。 MySQLはそうではありません。

独自のモジュールでデータベースベースの機能を構築することをお勧めします。または、pandasなどの共通インターフェイスを使用します。

+0

実際にコードをMySQLに移植する前に、もう少し詳しく調べてみましょう。 –

関連する問題