2009-08-26 21 views
3

皆さん、私はPythonでユーティリティを開発しています。メインクラスを2つ持っていて、sqlserverデータを取得するためのデータベースヘルパーがあります。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')") 
関連する問題