반응형
데이터베이스에서 데이터를 검색하고 검색해야하는 Python 프로젝트를 만들고 있습니다.
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';"))
따라서 주요 문제는 db
및 cursor
변수가 동일한 클래스의 다른 def / 함수에서 호출 할 수 없다는 것입니다. 내가 얻고 싶은 것은, 질의를하고 그 내용을 검색 할 수있는 세련된 질의입니다. 이것은 내 코드를 요약하므로해야합니다.
해결 방법
나는 일반적으로 psycopg2 / postgres를 사용하지만 이것은 Python의 SQLite를 예로 들어 자주 사용하는 기본 DB 클래스입니다.
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.close()
@property
def connection(self):
return self._conn
@property
def cursor(self):
return self._cursor
def commit(self):
self.connection.commit()
def close(self, commit=True):
if commit:
self.commit()
self.connection.close()
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()
이렇게하면 일반적으로 db = Database ( 'db_file.sqlite)
와 같이 또는 with
문에서 Database
클래스를 사용할 수 있습니다.
with Database('db_file.sqlite') as db:
# do stuff
with
문이 종료되면 연결이 자동으로 커밋되고 닫힙니다.
그런 다음 메서드에서 자주 수행하는 특정 쿼리를 캡슐화하여 액세스하기 쉽게 만들 수 있습니다. 예를 들어 트랜잭션 레코드를 처리하는 경우 날짜별로 가져 오는 방법이있을 수 있습니다.
def transactions_by_date(self, date):
sql = "SELECT * FROM transactions WHERE transaction_date = ?"
return self.query(sql, (date,))
다음은 테이블을 만들고 데이터를 추가 한 다음 다시 읽는 샘플 코드입니다.
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)
이게 도움이 되길 바란다!
참조 페이지 https://stackoverflow.com/questions/38076220
반응형
'MySql' 카테고리의 다른 글
MySQL 라즈베리 파이에 파이썬 3 용 mysql 커넥터 설치 (0) | 2020.11.05 |
---|---|
MySQL 열 문제로 잘린 데이터를 해결하는 방법 (0) | 2020.11.05 |
MySQL 동적 .htaccess 파일을 만들 수 있습니까? (0) | 2020.11.05 |
MySQL 명령 줄을 사용하여 MySQL 저장 프로 시저 실행 (0) | 2020.11.05 |
MySQL LAST_INSERT_ID() MySQL (0) | 2020.11.05 |
댓글