在db.py 檔案中有self.con = sqlite3.connect (db)和self.cur = self.con.cursor(),我如何在 main.py 檔案中呼叫它們以使用 cursor.execute?我寫了db.self.cur.execute('SELECT Name FROM TableExample'),但顯然我錯了,當然有錯誤
PS:在 db.py 中,我是否必須在 sqlite3.connect(db) 的 db 中插入資料庫的路徑?
我試過這樣:
資料庫
import sqlite3
class Database:
def __init__(self, db):
self.con = sqlite3.connect(db)
self.cur = self.con.cursor()
sql = """
CREATE TABLE IF NOT EXISTS employees(
ID Integer Primary Key,
example1 integer,
example2 integer
)
"""
self.cur.execute(sql)
self.con.commit()
主檔案
from db import Database
db = Database('/home/xxxx/database.db')
def example():
db.self.cur.execute('SELECT Name FROM TableExample') #error
result=[row[0] for row in cursor]
return result
更新:main.py 中的新示例
def example():
db.cur.execute('SELECT Name FROM TableExample')
result=[row[0] for row in db.cur]
return result
uj5u.com熱心網友回復:
這里有幾個問題需要解決。這一行的錯誤:
db.self.cur.execute('SELECT Name FROM TableExample') #error
是因為使用self. 您將需要閱讀如何使用類,但簡而言之self(按慣例命名,而不是要求)是物件實體如何參考自身,例如您self.cur在__init__(). 你不是指self物件外。
相反,您希望像這樣參考物件的cur屬性db:
db.cur.execute('SELECT Name FROM TableExample')
下一個問題是從資料庫中讀取的串列運算式。這個:
result=[row[0] for row in cursor]
將導致錯誤,因為cursor未定義。您可能想要參考物件中的cur屬性db:
result=[row[0] for row in db.cur]
然而,雖然這有效,但這并不是最好的方法。您隱式地使用了在游標上執行的最后一個查詢的結果,這確實有效,但不太明顯。
更好的是從查詢創建一個新的游標物件并迭代:
query = db.cur.execute('SELECT Name FROM TableExample')
result = [row[0] for row in query]
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/325078.html
標籤:Python sql 蟒蛇-3.x 数据库 sqlite
