Guest User

Untitled

a guest
Oct 26th, 2017
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.03 KB | None | 0 0
  1. DELETE = "delete"
  2. UPDATE = "update"
  3. SELECT = "select"
  4. INSERT = "insert"
  5.  
  6. QUOTE = "'"
  7.  
  8.  
  9. def format_parameter(parameter, value):
  10. return "%s = %s" % (parameter, determine_quote(value))
  11.  
  12. def determine_quote(value):
  13. if isinstance(value, basestring):
  14. return QUOTE + value + QUOTE
  15. return value
  16.  
  17. def generate_parameters(conditions, delimiter=","):
  18. return delimiter.join([format_parameter(parameter, value)
  19. for parameter, value in conditions.items()])
  20.  
  21.  
  22. def select(table_name, fields="*", where=None):
  23. yield "SELECT"
  24. yield ",".join(fields) or "*"
  25. yield "FROM"
  26. yield table_name
  27. if where:
  28. yield "WHERE"
  29. yield generate_parameters(where, delimiter="AND")
  30.  
  31.  
  32. def delete(table_name, where=None):
  33. yield "DELETE"
  34. yield "FROM"
  35. yield table_name
  36. if where:
  37. yield "WHERE"
  38. yield generate_parameters(where, delimiter="AND")
  39.  
  40. def update(table_name, updates, where=None):
  41. yield "UPDATE"
  42. yield table_name
  43. yield "SET"
  44. yield generate_parameters(updates)
  45. if where:
  46. yield "WHERE"
  47. yield generate_parameters(where, delimiter="AND")
  48.  
  49. def insert(table_name, updates):
  50. yield "INSERT"
  51. yield table_name
  52. yield "(%s)" % ", ".join(updates.keys())
  53. yield "VALUES"
  54. yield "(%s)" % ", ".join(map(determine_quote, updates.values()))
  55.  
  56.  
  57. class SqlBuilder(object):
  58.  
  59. def __init__(self):
  60. self.table_name = None
  61. self.fields = []
  62. self.conditions = {}
  63. self.updates = {}
  64. self.clause = None
  65.  
  66. def __getattr__(self, attr):
  67. self.table_name = attr
  68. return self
  69.  
  70. def select(self, *fields):
  71. self.fields = fields
  72. self.clause = SELECT
  73. return self
  74.  
  75. def where(self, **conditions):
  76. self.conditions = conditions
  77. self.clause = SELECT
  78. return self
  79.  
  80. def delete(self, **conditions):
  81. self.conditions = conditions
  82. self.clause = DELETE
  83. return self
  84.  
  85. def update(self, **updates):
  86. self.updates = updates
  87. self.clause = UPDATE
  88. return self
  89.  
  90. def insert(self, **updates):
  91. self.updates = updates
  92. self.clause = INSERT
  93. return self
  94.  
  95. def as_sql(self):
  96. builders = {
  97. SELECT: lambda: select(self.table_name, self.fields, self.conditions),
  98. DELETE: lambda: delete(self.table_name, self.conditions),
  99. UPDATE: lambda: update(self.table_name, self.updates, self.conditions),
  100. INSERT: lambda: insert(self.table_name, self.updates),
  101. }
  102.  
  103. return " ".join(builders[self.clause]())
  104.  
  105. __repr__ = as_sql
  106.  
  107.  
  108. db = SqlBuilder()
  109.  
  110. print db.users.delete(id=33)
  111. print db.users.select("username").where(username="fatih")
  112. print db.users.where(username="fatih").update(is_active=1)
  113. print db.users.insert(username="foo", password="test")
  114.  
  115. """
  116. Output:
  117.  
  118. DELETE FROM users WHERE id = 33
  119. SELECT username FROM users WHERE username = 'fatih'
  120. UPDATE users SET is_active = 1 WHERE username = 'fatih'
  121. INSERT users (username, password) VALUES ('foo', 'test')
  122.  
  123. """
Add Comment
Please, Sign In to add comment