将大型SQL文件导入本地Firebird数据库

2024-09-17 02:06:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我正试图通过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


Tags: 模块intest数据库transdbsqlcreate
3条回答

据我所知,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

相关问题 更多 >