AttributeError:'NoneType'对象没有属性'GetDataStore
大家好,我正在用Python开发一个工具,我有两个对象,一个是主类,另一个是用来获取SQL Server数据的数据库助手。
数据库助手的代码在这里:
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')")
主类的代码在这里:
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', 'xxx', '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 个回答
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')")
1
看看 __new__
这个方法应该做什么,以及它需要什么参数。我觉得你应该用 __init__
而不是 __new__
。你遇到的错误是因为 _db
的值是 None
。
3
首先:
__new__
这个方法应该叫做__init__
。- 去掉全局变量_host等的那一行。
然后修改__init__
方法:
self.host = host
self.userid = userid
etc.
接着修改GetDataStore
:
conn = _mssql.connect(server=self.host, user=self.userid, etc.)
这样就可以解决问题了。
我建议你多了解一下面向对象的Python编程。