AttributeError: объект «NoneType» не имеет атрибута «GetDataStore»

Я, ребята, я разрабатываю утилиту в 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' 

Что не так ??

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

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

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

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

И измените GetDataStore :

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

Это должно делать свое дело.

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

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

Я думаю, вы хотите изменить 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')")