2016-09-03 17 views
0

私は、次のPythonスクリプトを書いている:ValueError:スクリプトの引数はUnicodeでなければなりません。 - Python3.5、SQLite3の

import sqlite3 
import sys 

if len(sys.argv) < 2: 
    print("Error: You must supply at least SQL script.") 
    print("Usage: %s table.db ./sql-dump.sql" % (sys.argv[0])) 
    sys.exit(1) 

script_path = sys.argv[1] 

if len(sys.argv) == 3: 
    db = sys.argv[2] 
else: 
    db = ":memory:" 

try: 
    con = sqlite3.connect(db) 
    with con: 
     cur = con.cursor() 
     with open(script_path,'rb') as f: 
      cur.executescript(f.read()) 
except sqlite3.Error as err: 
    print("Error occured: %s" % err) 

私はsqlite_import.pyとしてこのプログラムを保存しました。 test.dbという名前のデータベースファイルと、SQLファイルworld.sqlがあります。 は今、私はのようなプログラムを実行しようとした:

sqlite_import.py test.db world.sql 

しかし、それは次のようなエラーを私に示しています

Traceback (most recent call last): 
    File "C:\Users\Jarvis\OneDrive\Documents\Python\Python Data Visualization Cookbook, 2E\2 Knowing Your Data\sqlite_import.py", line 21, in <module> 
    cur.executescript(f.read()) 
ValueError: script argument must be unicode. 

が、私はこの問題を解決するのに役立ちます。

答えて

1

あなたはバイナリとしてスクリプトファイルを開く:

with open(script_path,'rb') as f: 

をこれはb'...'バイト値ではなく、Unicodeのstrオブジェクトを生成します。 bを削除し、おそらくencoding引数を使用して、データのデコードに使用するコーデックを追加します。

+0

** utf-8 **、** cp037 **、** cp437 **、** ascii **などのさまざまなコーデックを試してみました。しかし、これのどれも助けられませんでした。 ** utf-8 **: ''utf-8'コーデックでは、位置27のバイト0xb9をデコードできません:無効な開始バイト。 ** cp037 **: "エラーが発生しました:近く" "構文エラー"を使用しています。 ** cp437 **: 'エラーが発生しました:" SQLite ":syntax error'の近くで使用しています。 **今何ですか?** – Harshil

+0

** ** ** Python 2.x **を使用してこのプログラムを実行すると、**エラーなし**が実行されます。 – Harshil

+0

@Harshil:はい、それはPython 2がバイトストリングだからです。 Python 3では、Unicode文字列を指定する必要があります。そのファイルの正しいエンコーディングを見つけなければならないでしょう。そのエンコーディングについてはわかりません。明らかにあなたが使ったコーデックはそうではありません。 –

関連する問題