ValueError: script argument must be unicode. - Python3.5, SQLite3
Question: 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.


Answer: 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.

