Python MySQLdb - Connection in a class
我正在制作一个Python项目,我必须从数据库中搜索和检索数据。
我尝试创建一个类,在其中我声明了连接并进行了查询,这里到目前为止我没有更多。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | import MySQLdb dbc =("localhost","root","1234","users") class sql: db = MySQLdb.connect(dbc[0],dbc[1],dbc[2],dbc[3]) cursor = db.cursor() def query(self,sql): sql.cursor.execute(sql) return sql.cursor.fetchone() def rows(self): return sql.cursor.rowcount sqlI = sql() print(sqlI.query("SELECT `current_points` FROM `users` WHERE `nick` = 'username';")) |
因此,主要问题是变量
我通常使用psycopg2 / postgres,但这是我经常使用的基本DB类,以Python的SQLite为例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | import sqlite3 class Database: def __init__(self, name): self._conn = sqlite3.connect(name) self._cursor = self._conn.cursor() def __enter__(self): return self def __exit__(self, exc_type, exc_val, exc_tb): self.commit() self.connection.close() @property def connection(self): return self._conn @property def cursor(self): return self._cursor def commit(self): self.connection.commit() def execute(self, sql, params=None): self.cursor.execute(sql, params or ()) def fetchall(self): return self.cursor.fetchall() def fetchone(self): return self.cursor.fetchone() def query(self, sql, params=None): self.cursor.execute(sql, params or ()) return self.fetchall() |
这将允许您使用
1 2 | with Database('db_file.sqlite') as db: # do stuff |
当
然后,您可以封装在方法中经常执行的特定查询,并使它们易于访问。例如,如果您正在处理事务记录,则可以使用一种方法按日期获取它们:
1 2 3 | def transactions_by_date(self, date): sql ="SELECT * FROM transactions WHERE transaction_date = ?" return self.query(sql, (date,)) |
下面是一些示例代码,我们创建一个表,添加一些数据,然后将其读回:
1 2 3 4 5 | with Database('my_db.sqlite') as db: db.execute('CREATE TABLE comments(pkey INTEGER PRIMARY KEY AUTOINCREMENT, username VARCHAR, comment_body VARCHAR, date_posted TIMESTAMP)') db.execute('INSERT INTO comments (username, comment_body, date_posted) VALUES (?, ?, current_date)', ('tom', 'this is a comment')) comments = db.query('SELECT * FROM comments') print(comments) |
我希望这有帮助!
那不是你用Python编写类的方式。您需要在
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | class sql: dbc = ("localhost","root","1234","users") def __init__(self): db = MySQLdb.connect(*self.dbc) self.cursor = db.cursor() def query(self,sql): self.cursor.execute(sql) return self.cursor.fetchone() def rows(self): return self.cursor.rowcount |
您可以使用构造函数进行连接。当创建类的对象时,构造函数将自动调用。
1 2 3 4 5 6 7 | import MySQLdb class Connection: def __init__(self): self.con=MySQLdb.connect("127.0.0.1","root","","db_name",3306) self.cmd=self.con.cursor() obj=Connection() |