Conecte-se ao servidor SQLite3 usando PyODBC, Python
Estou tentando testar uma classe que carrega dados de um servidor SQL com uma consulta. Para fazer isso, fui instruído a usarsqlite3
. Agora, o problema é que, embora a classe consiga se conectar ao banco de dados real com facilidade, estou lutando para me conectar com o temporáriosqlite3
servidor que eu criei, pois não consigo descobrir como deve ser a cadeia de conexão. estou a usarpyodbc
na classe para conectar-se aos bancos de dados. Então, alguém tem uma idéia de como deve ser a cadeia de conexão?
A classe tem a seguinte aparência:
import petl as etl
import pyodbc
class Loader:
"""
This is a class from which one can load data from an SQL server.
"""
def __init__(self, connection_string):
"""
This is the initialization file, and it requires the connection_string.
:param connection_string:
:type connection_string: str
:return:
"""
self.connection = pyodbc.connect(connection_string)
def loadFromSQL(self, query):
"""
This function loads the data according to the query passed in query.
:param query:
:type query: str
"""
self.originalTableETL = etl.fromdb(self.connection, query)
self.originalTablePD = etl.todataframe(self.originalTableETL)
E o temporáriosqlite3
servidor é o seguinte
import sqlite3 as lite
con = lite.connect('test.db')
with con:
cur = con.cursor()
cur.execute("DROP TABLE IF EXISTS test_table")
cur.execute("CREATE TABLE test_table(col1 TEXT, col2 TEXT)")
cur.execute("INSERT INTO test_table VALUES('Hello', 'world!')")
Então, o que eu gostaria de inserir é algo como
tester = Loader('connection_string_goes_here')
tester.loadFromSQL("SELECT * FROM test_table")
EDITAR
Ok, vasculhei um pouco a web e descobri que uma possível cadeia de conexão é"DRIVER={SQL Server};SERVER=localhost;DATABASE=test.db;Trusted_connection=yes"
. No entanto, a conexão expira após um tempo e retorna a seguinte mensagem de erro:
pyodbc.Error: ('08001', '[08001] [Microsoft][ODBC SQL Server Driver][DBNETLIB]SQL Server does not exist or access denied. (17) (SQLDriverConnect)')
O que achei estranho por ser local e por não ter especificado nenhuma senha. Eu também tentei especificar o nome exato do caminho sem sucesso.
melhor,
Vencedor