AttributeError: у объекта 'NoneType' нет атрибута 'GetDataStore' - PullRequest
3 голосов
/ 26 августа 2009

Ребята, я разрабатываю утилиту на python, и у меня есть 2 объекта - основной класс и помощник по базе данных для получения данных sqlserver.

database.py

import _mssql

class sqlserver(object):

    global _host, _userid, _pwd, _db

    def __new__ (self, host, userid, pwd, database):
        _host = host
        _userid = userid
        _pwd = pwd
        _db = database

    def GetDataStore(self, sql):
        conn = _mssql.connect(server='(local)\\sqlexpress', user='sa', password='xxx', database='Framework.Data2')
        conn.execute_non_query('CREATE TABLE persons(id INT, name VARCHAR(100))')
        conn.execute_non_query("INSERT INTO persons VALUES(1, 'John Doe')")
        conn.execute_non_query("INSERT INTO persons VALUES(2, 'Jane Doe')") 

gaemodel.py

import os
import sys
from fwk import system, types, databases

class helper(object):
    pass

def usage(app_name):
    return "Usage: %s <project name>" % (app_name)

def main(argv):
    _io = system.io()

    project_name = argv[1]
    project_home = os.path.join(_io.CurrentDir(), project_name)

    _db = databases.sqlserver('(local)\sqlexpress', 'sa', 'P1lim07181702', 'Framework.Data2')    
    _db.GetDataStore("select name from sysobjects where xtype = 'U' and name not like 'Meta%'")

    str = "from google.appengine.ext import db"
    #for row in cur:
    #    str += "class %s" % row["name"]

    print cur

if __name__ == "__main__":
    if len(sys.argv) > 1:
        main(sys.argv[1:])
    else:
        print usage(sys.argv[0]);

Моя проблема в том, что когда я пытаюсь запустить код, верните мне эту ошибку

Traceback (most recent call last):
  File "C:\Projectos\FrameworkGAE\src\gaemodel.py", line 28, in <module>
    main(sys.argv[1:])
  File "C:\Projectos\FrameworkGAE\src\gaemodel.py", line 18, in main
_    db. GetDataStore("select name from sysobjects where xtype = 'U' and name not like 'Meta%'")
AttributeError: 'NoneType' object has no attribute 'GetDataStore'

Что не так ??

Ответы [ 3 ]

3 голосов
/ 26 августа 2009

Прежде всего:

  • Метод __new__ должен называться __init__.
  • Удалить глобальную строку _host и т. Д.

Затем измените метод __init__:

self.host = host
self.userid = userid
etc.

И изменить GetDataStore:

conn = _mssql.connect(server=self.host, user=self.userid, etc.)

Это должно сработать.

Предлагаю вам немного прочитать об объектно-ориентированном Python.

1 голос
/ 26 августа 2009

Посмотрите, что __new__ должен делать и какие аргументы он должен иметь. Я думаю, что вы хотели использовать __init__, а не __new__. Причина вашей конкретной ошибки в том, что _db равно None.

0 голосов
/ 26 августа 2009

Я думаю, что вы хотите изменить database.py следующим образом:

import _mssql

class sqlserver(object):

    def __init__ (self, host, userid, pwd, database):
        self.host = host
        self.userid = userid
        self.pwd = pwd
        self.db = database

    def GetDataStore(self, sql):
        conn = _mssql.connect(server=self.host, user=self.userid, password=self.pwd, database=self.db)
        conn.execute_non_query('CREATE TABLE persons(id INT, name VARCHAR(100))')
        conn.execute_non_query("INSERT INTO persons VALUES(1, 'John Doe')")
        conn.execute_non_query("INSERT INTO persons VALUES(2, 'Jane Doe')")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...