如何在另一个类中使用我的类'database'?

时间:2015-11-21 21:39:38

标签: python class

我在Python中更新OOP,并且已经尝试了一段时间在另一个类中使用我的数据库类class database(object): def connect_db(self): try: import sqlite3 as sqli connection = sqli.connect('pw.db') cur = connection.cursor() except: print("There was an error connecting to the database.")

我该怎么办?

 import db_helper as dbh
    class account_settings(object):
                def create_account(self):
        setting_username = input('\nUsername?\n')
        setting_password = input('\nPassword?\n')

        cur = db.connect_db()
        with cur:
            cur.execute('''
                CREATE TABLE IF NOT EXISTS my_passwords(
                    id INTEGER PRIMARY KEY AUTOINCREMENT NULL,
                    password text UNIQUE
                )
            ''')
            try:
                cur.execute('INSERT INTO my_passwords(password) VALUES(?)', (self.create_password(),) )
            except:
                print("Error occurred trying to insert password into db. Please retry")

    c = account_settings()
    c.create_account()

我一直在尝试这样,但它不起作用:

  File "settings.py", line 30, in <module>
    c.create_account()
  File "settings.py", line 15, in create_account
    with cur:
AttributeError: __exit__

新错误:

{{1}}

1 个答案:

答案 0 :(得分:1)

您需要了解变量范围。 db.connect_db()创建名为cur的游标连接,但不对其执行任何操作;当该方法完成时,该对象将被销毁。特别是,它永远不会回到create_account方法。

有一种简单的方法可以解决这个问题:对象返回给方法,并在那里使用它。

def connect_db(self):
    ...
    cur =  connection.cursor()
    return cur

...
def create_account(self):
    cur = db.connect_db()
    with cur:

甚至更好:

with db.connect_db()

请注意,实际上,这些都不应该是类。 Python中的类只有在你保持某种状态时才有用,而这种情况并非在这里发生。 connect_dbcreate_account应该只是各自模块中的独立功能。