2016-02-10 3 views
0

Я новичок в python, и я пытаюсь загрузить данные из базы данных. Код работает без ошибок, но ничего не выводит, хотя я прошу его печатать в трех местах (в качестве проверки того, что он работает). Это, наверное, что-то простое, но я не вижу проблемы - я был бы очень благодарен за любые указатели. Благодаря!Загрузить данные из базы данных в Python

Вот код (он правильно отступом, но этот сайт проигнорировал его):

import win32com.client 
from numpy import array,isnan,delete,arange 

class LoadData: 
    db = "" 
    def __init__(self): 
     self.db='330_26112015.mdb' 
     print db         # Doesn't seem to print this 
     [self.EventCode, self.Easting, self.Northing]=import_db(self,self.db[0]) 

    def import_db(self,file): 
     print self.db        # Doesn't seem to print this 
     connection = win32com.client.Dispatch(r'ADODB.Connection') 
     DSN = 'PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE='+file+';' 
     connection.Open(DSN) 
     recordset = win32com.client.Dispatch(r'ADODB.Recordset') 

     Name =('Stb Maggy') 
     recordset.Open('SELECT VesselID FROM SurveyEventData WHERE VesselName=?', Name, connection) 
     ID = recordset.GetRows() 
     print "ID is:", ID       # Doesn't seem to print this 

     recordset.Open('SELECT EventCode, Easting, Northing FROM SurveyEventData Where VesselID=?', ID, connection) 
     D = recordset.GetRows() 

     EventCode = array(D[0]) 
     Easting = array(D[1]) 
     Northing = array(D[2]) 

     return EventCode, Easting, Northing 

ответ

0

Как вы используете это? Может быть, вы должны попробовать определение основной в конце (за пределами класса и в корневой отступа)

def main(): 
    obj = LoadData() 
    obj.import_db('somefile') 
+0

Спасибо :) Я отредактировал код так, чтобы он достиг второй функции - это была проблема с «я». Теперь для реальной проблемы: я пробовал много методов для подключения к базам данных MS Access (.mdb) и приступил к ошибкам, теперь я пытаюсь использовать pyodbc: cnxn = pyodbc.connect ('DRIVER = {SQL Server}; SERVER = localhost ; PORT = 1433; DATABASE = '+ file +'; UID =; PWD = '), это то же самое, что описано во многих учебниках, но ошибка: SQL Server не существует или отображается доступ запрещен. Кто-нибудь видел это раньше? –

+0

Возможно, проблема с брандмауэром. Указав очевидное, либо сервер может не отображаться или не отображаться в среде IDE, в которой выполняется ваш код, из – Obsidian

0

Ваш второй и третий операторы печати выглядят хорошо, что, кажется, указывает, что ваш код не достигает их. Проблема заключается в вашем методе __init__(). Вот исправление:

class LoadData: 
    db = None 
    def __init__(self): 
     self.db='330_26112015.mdb' 
     print self.db 
     [self.EventCode, self.Easting, self.Northing] = self.import_db(self.db) 

Проблема с версией была:

  1. путаница между локальной переменной и переменным экземпляром (печать db вместо self.db), а так же между функциями в локальном пространстве имен по сравнению, например методы (вызов import_db() вместо self.import_db()).
  2. путаница о self и его использование. Методы экземпляра (например, ваш import_db()) автоматически получают экземпляр в качестве первого аргумента, поэтому вам не нужно его передавать. Фактически, при вызове self.import_db(self, self.db) вам следует сообщить, что import_db получил три аргумента, когда ожидал два (поскольку экземпляр автоматически добавляется в начало списка аргументов).
  3. Строка и список. Переменная self.db является строкой, поэтому ссылка self.db[0] - это строка "3", а не имя вашего файла базы данных (именно это я и предполагал).
  4. Инициализация пустой строки. Это более стилистично, чем железо, но лучше использовать None, а не пустую строку, чтобы указать, что переменная еще не назначена; его легче тестировать и меньше подвергать ошибкам.

 Смежные вопросы

  • Нет связанных вопросов^_^