2009-08-26 6 views
3

저는 파이썬으로 유틸리티를 개발하고 있으며, SQL Server 데이터를 얻기 위해 2 개의 객체와 데이터베이스 도우미를 가지고 있습니다.AttributeError : 'NoneType'객체에 'GetDataStore'속성이 없습니다.

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' 

어떤 문제가 돌려 주어 ??

+0

입니까? '_db'? – SilentGhost

답변

3

먼저 다음 __new__ 방법은 __init__을 지정해야합니다

  • .
  • 그런 다음 __init__ 방법 변경 글로벌 _host 등 라인

을 제거

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

을 그리고 GetDataStore을 변경

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

트릭을해야한다고.

나는 당신이 객체 지향 Python을 조금 읽으라고 제안한다.

1

__new__이 무엇을해야하는지, 어떤 인수가 있어야하는지 살펴보십시오. 내 생각에 __init__을 사용하고 __new__을 사용하지 않으려한다고 생각합니다. 귀하의 특정 오류에 대한 이유는 _dbNone입니다. 모든

0

나는이 같은 databases.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')") 
관련 문제