Guest User

Untitled

a guest
Jan 4th, 2016
165
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.80 KB | None | 0 0
  1. class Database(object):
  2.  
  3. mysql_settings = {
  4.  
  5. }
  6.  
  7. connection = None
  8. max_attempt = 3
  9. character = 'utf8'
  10.  
  11. def mysql_connect(self):
  12. """
  13. Устанавливает соединение с базой данных
  14. """
  15. self.connection = mysqldb_connect(**self.mysql_settings)
  16. self.execute('set names %s' % self.character)
  17.  
  18. def run_query(self, sql, attempt=0):
  19. """
  20. Выполняет запрос, обрабатывает ошибки
  21. 2006 - Mysql server has gone away
  22. 2013 - Lost connection to mysql server
  23. :param sql:
  24. :param attempt:
  25. """
  26. cursor = self.connection.cursor()
  27. print sql
  28. try:
  29. cursor.execute(sql)
  30. except Exception, e:
  31. err_code, err_text = e
  32. print "!!! %s !!!" % err_text
  33. if err_code in [2006, 2013] and attempt < self.max_attempt:
  34. self.mysql_connect()
  35. attempt += 1
  36. self.run_query(sql, attempt)
  37. else:
  38. raise e
  39. self.connection.commit()
  40. return cursor
  41.  
  42. def execute(self, sql):
  43. """
  44. Исполняет произвольный SQL запрос
  45. :param sql: String
  46. """
  47. self.run_query(sql)
  48.  
  49. def insert(self, sql):
  50. """
  51. Выполняет вставку строки в таблицу. Возвращает идентификатор добавленой записи
  52. :param sql: String
  53. :return: Integer
  54. """
  55. cursor = self.run_query(sql)
  56. return cursor.lastrowid
  57.  
  58. def get_rows(self, sql):
  59. """
  60. Возвращает несколько строк
  61. :param sql: String
  62. :rtype: Iterator
  63. """
  64. cursor = self.run_query(sql)
  65. return cursor.fetchall()
  66.  
  67. def get_row(self, sql):
  68. """
  69. Возвражает одну строку из запроса
  70. :param sql: String
  71. :return: Tuple
  72. """
  73. cursor = self.run_query(sql)
  74. print cursor
  75. return cursor.fetchone()
  76.  
  77. def get_element_by_conditions(self, tablename, conditions="1"):
  78. """
  79. Вовзращает элемент по условию.
  80. Оставлена для совместимости
  81. :param tablename: String
  82. :param conditions: String
  83. :return: Tuple
  84. """
  85. sql = 'select * from %s where %s' % (tablename, conditions)
  86. return self.get_row(sql)
  87.  
  88. #---------------#
  89.  
  90. def create_db_record(self, data):
  91. """
  92. Склеивает объявления в базе данных
  93. :param data: Dict
  94. """
  95. opts = {
  96. "tablename": "offers",
  97. "conditions": "name = '%s' and `url` = '%s'" % (data['name'], data['url'])
  98. }
  99. row = self._Database.get_element_by_conditions(**opts)
  100. print row
  101.  
  102. if row is not None:
  103. data.update({"id": row[0]})
  104.  
  105. opts = {
  106. "tablename": "offers",
  107. "data": data,
  108. "query_type": "replace"
  109. }
  110.  
  111. query = self._Database.create_insert_query(**opts)
  112. print query
  113. self._Database.execute(query)
  114. self.log.info("Parsed successfully: [%s]" % data['url'])
Advertisement
Add Comment
Please, Sign In to add comment