Форум сайта python.su
В 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 + "'")
Офлайн
Велосипед. Еще и данные не эскейпятся. Бери sqlalchemy. Если не нужен orm используй хотя бы sql toolkit
Отредактировано (Сен. 3, 2008 13:53:22)
Офлайн
Я думаю, использовать уже готовые ORM проще, чем писать велосипед.
А так, вообще, особых проблем с кодом не вижу.
Офлайн
Я бы не делал метод __del__ - вроде его не рекомендуется юзать без понимания…, ибо сборщик мусора как-то не так как обычно начинает работать в этом месте.
Еще стоит квотить передаваемые запросу параметры.
Офлайн
Насчет ORM, я пока не очень хорошо разбираюсь в моделях у Django, база уже есть и некоторые вещи, например где данные беруться из нескольких таблиц (3-5) или вложенные запросы, я не представляю как делать, так что пока голым SQL проще (для меня). Насчет велосипеда я согласен. За __del__ - спасибо, вообщем то это и хотел узнать. Запросы передаваемые параметру обратываются Django (query|escape, например). Спасибо всем
Офлайн
надо обрабатывать на запросы, а параметры, подставляемые в запрос.
вот посмотри, сюда: http://wiki.python.org/moin/DbApiFaq
Вот здесь, передаваемые данные автоматически эскейпятся:
>>> cursor.execute("SELECT * FROM my_table WHERE my_column = %s", "column_value")
Отредактировано (Сен. 3, 2008 16:15:39)
Офлайн
shizaВсе понял, спасибо.
надо обрабатывать на запросы, а параметры, подставляемые в запрос.
……
Офлайн