简体   繁体   中英

ValueError: script argument must be unicode. - Python3.5, SQLite3

I'm writing following python script:

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)

I saved this program as sqlite_import.py . I have a database file named test.db and a SQL file world.sql . Now I tried to run program as:

sqlite_import.py test.db world.sql

But it shows me error like following:

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.

Help me to fix this.

You opened the script file as binary :

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

This produces a b'...' bytes value, not a Unicode str object. Remove the b , and perhaps add an encoding argument to specific what codec to use to decode the data with.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM