我正试图通过fdb模块将一个大的SQL文件(15k+语句)导入到一个新的本地Firebird数据库中。在
import fdb
db = fdb.create_database("CREATE DATABASE 'test.fdb'")
sql_str = open('test.sql').read()
in_trans = False
for stmt in sql_str.split(';'):
if stmt.startswith('INSERT') and not in_trans:
in_trans = True
db.begin()
else:
in_trans = False
db.commit()
db.execute_immediate(stmt)
我没有找到更好的方法来做这件事。。。(就像在sqlite3模块中使用一种executescript()
,它在每次调用中执行多个语句)。在
它对前几条语句有效,然后停止并引发异常:
^{pr2}$从Firebird文档中了解到,我必须使用sqldialect 3才能在表模式中使用BIGINT数据类型。我已经用fdb.create_database()
默认参数正确地设置了数据库SQL方言3,但我仍然需要设置客户端SQL方言,我不知道在哪里以及如何做到这一点。我在OSX上使用Firebird2.5.2和Python2.7.2
据我所知,
fdb
应该默认为方言3,但是您可以使用连接属性dialect=3显式地指定它,参见Connecting to a database中的示例2。奇怪的是Firebird中没有方言0。在如果这确实解决了问题,我建议您在问题跟踪器中提交一个bug,因为驱动程序应该默认为方言3:http://tracker.firebirdsql.org/browse/PYFB
isql-用户sysdba-通过
不能百分之百确定上面的语法是正确的
isql-用户sysdba-通过测试.fdb<;测试.sql在
将大型sql文件导入firebird数据库的更好方法是使用isql
相关问题 更多 >
编程相关推荐