SQLite – 从文件运行多行SQL脚本?

我在文件user.sql中有以下SQL:

CREATE TABLE user ( user_id INTEGER PRIMARY KEY, username varchar(255), password varchar(255) ); 

但是,执行以下命令时:

 sqlite3 my.db < user.sql 

产生以下错误:

 Error: near line 1: near ")": syntax error 

我宁愿保持原来的SQL,因为该文件将被检入到源代码pipe理中,并且将会像现在一样更易于维护和可读。 SQL可以像这样跨越多行,还是我需要把它全部放在同一行?

我有完全一样的问题。

然后我注意到,我的编辑器(Notepad ++)报告Macintosh格式的行结束。

将eols转换成Unix风格将脚本文件转换为sqlite3可以理解的格式。

我意识到这不是对你的问题的直接回答。 正如Brian所说,这可能是一个愚蠢的平台问题。

如果你通过Python与SQLite交互,你可能会避免大多数平台特定的问题,你会得到有趣的东西,如date时间列:-)

像这样的东西应该可以正常工作:

 import sqlite3 qry = open('create_table_user.sql', 'r').read() conn = sqlite3.connect('/path/to/db') c = conn.cursor() c.execute(qry) conn.commit() c.close() conn.close() 

多行不是问题。 可能有一个平台的问题,因为我能够在OS X 10.5.8上使用SQLite3 3.6.22成功运行这个例子。

这里是bernie的python示例升级来处理脚本中的exception,而不是静默失败(Windows 7,ActiveState Python 3.x)

 import sqlite3 import os import os.path import ctypes databaseFile = '.\\SomeDB.db' sqlFile = '.\\SomeScripts.sql' # Delete the old table if os.path.isfile(databaseFile): os.remove(databaseFile) # Create the tables qry = open(sqlFile, 'r').read() sqlite3.complete_statement(qry) conn = sqlite3.connect(databaseFile) cursor = conn.cursor() try: cursor.executescript(qry) except Exception as e: MessageBoxW = ctypes.windll.user32.MessageBoxW errorMessage = databaseFile + ': ' + str(e) MessageBoxW(None, errorMessage, 'Error', 0) cursor.close() raise