Найти - Пользователи
Полная версия: Укажите недостатки такого подхода
Начало » Базы данных » Укажите недостатки такого подхода
1
timas
В Python еще новичок - всего неделя. Возникла потребность делать много много запросов. Написал класс, упрощающий как мне кажется работу, по крайней мере данные можно одной строчкой получать. Но всех подводных камней я не знаю (еще не успел осознать и понять), может кто-то сразу скажет, что не так, какие могут быть проблемы.

Просто есть подозрение что я закрываю(освобождаю) не все что нужно.

class objMySQL:
def __init__(self, host='localhost', user='root', passwd='', database='intras'):
self.db = MySQLdb.connect(host, user, passwd, database)
self.cursor=self.db.cursor()
self.cursor.execute("SET NAMES utf8")

#Запрос на select
def execute(self, sql):
self.cursor.execute(sql)
return list(self.cursor.fetchall())

#Запрос на колво-записей (count * - первое поле)
def executeScalar(self, sql):
self.cursor.execute(sql)
return self.cursor.fetchone()

#Запрос на INSERT, UPDATE, DELETE, ALTER, DROP, CREATE....
def executeNonQuery(self, sql):
self.cursor.execute(sql)
self.db.commit()
return

def __del__(self):
self.cursor.close()
self.db.close()
Примеры использования:
count=objMySQL().executeScalar("SELECT COUNT(*) FROM adminka_users")

user=objMySQL().execute("SELECT * FROM adminka_users WHERE id='" + iduser + "'")

objMySQL().executeNonQuery("DELETE FROM adminka_user_groups WHERE user_id='" + iduser + "'")
j2a
Велосипед. Еще и данные не эскейпятся. Бери sqlalchemy. Если не нужен orm используй хотя бы sql toolkit
Ferroman
Я думаю, использовать уже готовые ORM проще, чем писать велосипед.
А так, вообще, особых проблем с кодом не вижу.
shiza
Я бы не делал метод __del__ - вроде его не рекомендуется юзать без понимания…, ибо сборщик мусора как-то не так как обычно начинает работать в этом месте.
Еще стоит квотить передаваемые запросу параметры.
timas
Насчет ORM, я пока не очень хорошо разбираюсь в моделях у Django, база уже есть и некоторые вещи, например где данные беруться из нескольких таблиц (3-5) или вложенные запросы, я не представляю как делать, так что пока голым SQL проще (для меня). Насчет велосипеда я согласен. За __del__ - спасибо, вообщем то это и хотел узнать. Запросы передаваемые параметру обратываются Django (query|escape, например). Спасибо всем
shiza
надо обрабатывать на запросы, а параметры, подставляемые в запрос.
вот посмотри, сюда: http://wiki.python.org/moin/DbApiFaq
Вот здесь, передаваемые данные автоматически эскейпятся:
>>> cursor.execute("SELECT * FROM my_table WHERE my_column = %s", "column_value")
Причем это стандарт: Python Database API Specification v2.0 (http://www.python.org/dev/peps/pep-0249/)

Это я все к чему: ИМХО лучше передавать в методы execute* параметры в виде отдельное переменной-списка. Чтоб потом можно было их обэскейпить безболезненно.
timas
shiza
надо обрабатывать на запросы, а параметры, подставляемые в запрос.
……
Все понял, спасибо.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB