我在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}}
答案 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_db
和create_account
应该只是各自模块中的独立功能。