5
5
"""
6
6
7
7
import sqlalchemy
8
- import sqlalchemy .orm
9
8
import sqlalchemy .ext .declarative
9
+ import sqlalchemy .orm
10
+ from sqlalchemy .sql import sqltypes
10
11
from sqlalchemy .sql .expression import text , bindparam
11
12
from sqlalchemy .dialects import mysql
12
13
from sqlalchemy .schema import ForeignKey , DDLElement
@@ -151,21 +152,13 @@ def set_password(self, Password):
151
152
def __repr__ (self ):
152
153
return "<User('%d','%s')>" % (self .UserId , self .Username )
153
154
154
- def formatify (instr ):
155
- """This function is an ugly hack, because something in
156
- MySQLdb/sqlalchemy goes wrong whenever there's a '%' (wildcard)
157
- character, and it tries to run it through python's string
158
- formatter. This is terrible, but it's better than being
159
- insecure. Deal by escaping the %s."""
160
- return instr .replace ('%' , '%%' )
161
-
162
155
class CreateDatabase (DDLElement ):
163
156
def __init__ (self , name ):
164
157
self .name = name
165
158
166
159
@compiles (CreateDatabase )
167
160
def visit_create_database (element , compiler , ** kw ):
168
- return formatify ( "CREATE DATABASE %s" % (compiler .preparer .quote_identifier (element .name ),) )
161
+ return "CREATE DATABASE %s" % (compiler .preparer .quote_identifier (element .name ),)
169
162
170
163
class DropDatabase (DDLElement ):
171
164
def __init__ (self , name , ignore = False ):
@@ -175,7 +168,7 @@ def __init__(self, name, ignore=False):
175
168
@compiles (DropDatabase )
176
169
def visit_drop_database (element , compiler , ** kw ):
177
170
if_exists = "IF EXISTS" if element .ignore else ""
178
- return formatify ( "DROP DATABASE %s %s" % (if_exists , compiler .preparer .quote_identifier (element .name ) ))
171
+ return "DROP DATABASE %s %s" % (if_exists , compiler .preparer .quote_identifier (element .name ))
179
172
180
173
class CreateUser (DDLElement ):
181
174
def __init__ (self , name , host , passwd ):
@@ -185,8 +178,8 @@ def __init__(self, name, host, passwd):
185
178
186
179
@compiles (CreateUser )
187
180
def visit_create_user (element , compiler , ** kw ):
188
- return formatify ( "CREATE USER %s@%s IDENTIFIED BY %s" % \
189
- tuple ([compiler .sql_compiler .render_literal_value (x , sqlalchemy . String ) for x in (element .name , element .host , element .passwd )]) )
181
+ return "CREATE USER %s@%s IDENTIFIED BY %s" % \
182
+ tuple ([compiler .sql_compiler .render_literal_value (x , sqltypes . STRINGTYPE ) for x in (element .name , element .host , element .passwd )])
190
183
191
184
class DropUser (DDLElement ):
192
185
def __init__ (self , name , host ):
@@ -195,8 +188,8 @@ def __init__(self, name, host):
195
188
196
189
@compiles (DropUser )
197
190
def visit_drop_user (element , compiler , ** kw ):
198
- return formatify ( "DROP USER %s@%s" % \
199
- tuple ([compiler .sql_compiler .render_literal_value (x , sqlalchemy . String ) for x in (element .name , element .host )]) )
191
+ return "DROP USER %s@%s" % \
192
+ tuple ([compiler .sql_compiler .render_literal_value (x , sqltypes . STRINGTYPE ) for x in (element .name , element .host )])
200
193
201
194
class ChangePassword (DDLElement ):
202
195
def __init__ (self , name , host , passwd ):
@@ -207,7 +200,7 @@ def __init__(self, name, host, passwd):
207
200
@compiles (ChangePassword )
208
201
def visit_change_password (element , compiler , ** kw ):
209
202
return formatify ("SET PASSWORD FOR %s@%s = PASSWORD(%s)" % \
210
- tuple ([compiler .sql_compiler .render_literal_value (x , sqlalchemy . String ) for x in (element .name , element .host , element .passwd )]))
203
+ tuple ([compiler .sql_compiler .render_literal_value (x , sqltypes . STRINGTYPE ) for x in (element .name , element .host , element .passwd )]))
211
204
212
205
class Grant (DDLElement ):
213
206
def __init__ (self , db , user , host ):
@@ -217,10 +210,10 @@ def __init__(self, db, user, host):
217
210
218
211
@compiles (Grant )
219
212
def visit_grant (element , compiler , ** kw ):
220
- return formatify ( "GRANT ALL ON %s.* TO %s@%s" % \
213
+ return "GRANT ALL ON %s.* TO %s@%s" % \
221
214
(compiler .preparer .quote_identifier (element .db ),
222
- compiler .sql_compiler .render_literal_value (element .user , sqlalchemy . String ),
223
- compiler .sql_compiler .render_literal_value (element .host , sqlalchemy . String ) ))
215
+ compiler .sql_compiler .render_literal_value (element .user , sqltypes . STRINGTYPE ),
216
+ compiler .sql_compiler .render_literal_value (element .host , sqltypes . STRINGTYPE ))
224
217
225
218
class Revoke (DDLElement ):
226
219
def __init__ (self , db , user , host ):
@@ -230,8 +223,8 @@ def __init__(self, db, user, host):
230
223
231
224
@compiles (Revoke )
232
225
def visit_revoke (element , compiler , ** kw ):
233
- return formatify ( "REVOKE ALL ON %s.* FROM %s@%s" % \
226
+ return "REVOKE ALL ON %s.* FROM %s@%s" % \
234
227
(compiler .preparer .quote_identifier (element .db ),
235
- compiler .sql_compiler .render_literal_value (element .user , sqlalchemy . String ),
236
- compiler .sql_compiler .render_literal_value (element .host , sqlalchemy . String ) ))
228
+ compiler .sql_compiler .render_literal_value (element .user , sqltypes . STRINGTYPE ),
229
+ compiler .sql_compiler .render_literal_value (element .host , sqltypes . STRINGTYPE ))
237
230
0 commit comments