我们目前使用一个程序来创建大型数据集并将其写入数据库,但是这个过程可能需要很长时间。我们正在尝试将sqlalchemy中的cursor.fast_executemany = True合并起来,以提高对这些数据库的写入时间。当我试图使用SQLite3和pyodbc创建一个引擎时,我的代码错误出现在这里:
import pandas as pd
from sqlite3 import connect
import pyodbc
from sqlalchemy import create_engine
engine = create_engine('SQLite3 ODBC Driver+pyodbc:///C:\\Users\\Documents\\PythonScripts\\FLR.sosat')
conn = engine.connect()
c = conn.cursor()我们尝试了许多方法来指定驱动程序和服务器,如下所示:
# conn = pyodbc.connect('DRIVER={SQL Server};'
# 'SERVER=localhost;'
# 'DATABASE=C:\\Users\\Documents\\PythonScripts\\FLR.sosat')由于我们接收上面注释掉的代码中的驱动程序和服务器错误,单个引擎线似乎是最接近工作的。我们已经从http://www.ch-werner.de/sqliteodbc/下载了ODBC驱动程序。
我们收到ArgumentError:无法从字符串解析rfc1738 URL。
对于如何将SQLite3数据库连接到pyodbc以及如何提高写入速度,我们将不胜感激。谢谢!
注意事项.sosat文件是一个使用sqlite3的数据库文件,它应该像任何.db文件一样工作
我们从这里尝试了修复:使用SQLite3 PyODBC连接到PyODBC服务器,这对我们不起作用,我们收到了驱动程序错误: InterfaceError:(‘no 002’,'IM002ODBC驱动程序管理器数据源名称未找到并且没有指定(0) (SQLDriverConnect)的默认驱动程序‘)
发布于 2022-05-09 15:27:44
你想要实现的目标将不会奏效,原因有二:
理由1:
SQLAlchemy不支持pyodbc作为用于SQLite的DBAPI层。
理由2:
即使SQLAlchemy确实支持sqlite+pyodbc://,SQLite ODBC驱动程序也必须支持“参数数组”,这是fast_executemany = True用来实现其魔力的一个可选的ODBC特性。并不是所有的ODBC驱动程序都支持fast_executemany = True,如这里所示。使用vanilla进行的快速测试表明,"SQLite3 ODBC驱动程序“不支持它,实际上它使Python解释器崩溃:
crsr.fast_executemany = True
crsr.executemany(
f"INSERT INTO {table_name} (txt) VALUES (?)", [("foo",), ("bar",)]
)
# Process finished with exit code -1073741819 (0xC0000005)(错误0xC0000005是“访问冲突”)
发布于 2022-05-09 14:18:04
你试过吗
import sqlite3
db = r'C:\Users\Documents\PythonScripts\FLR.sosat'
conn = sqlite3.connect(db)
print('connection established')https://stackoverflow.com/questions/72173366
复制相似问题