2012-02-22 22 views
5

tôi cần để tự động thay đổi bảng và các biến bất cứ lúc nào, vì vậy tôi đã viết một phương pháp trăn như thế này:Python và MySQLdb: thay thế bảng kết quả là lỗi cú pháp

selectQ ="""SELECT * FROM %s WHERE %s = %s;""" 
    self.db.execute(selectQ,(self.table,self.columnSpecName,idKey,)) 
    return self.db.store_result() 

Tuy nhiên kết quả này trong một lỗi cú pháp ngoại lệ. Tôi đã thử gỡ lỗi nó để tôi in các biến trong phương thức và điền chúng theo cách thủ công, và nó đã hoạt động. Vì vậy, tôi không chắc chắn những gì tôi đang làm sai?

Có phải vì tôi cố gắng sử dụng thay thế cho bảng không?

Ngoài ra làm cách nào để gỡ lỗi mysqldb để nó in truy vấn được thay thế dưới dạng chuỗi?

Trả lời

10

Thay thế tham số trong API DB chỉ dành cho các giá trị - không phải bảng hoặc trường. Bạn sẽ cần phải sử dụng chuỗi thay thế bình thường đối với những người:

selectQ ="""SELECT * FROM %s WHERE %s = %%s;""" % (self.table,self.columnSpecName) 
self.db.execute(selectQ,(idKey,)) 
return self.db.store_result() 

Lưu ý rằng các placeholder giá trị có một đôi % - đây là để nó lại một mình bởi sự thay thế chuỗi ban đầu.

+0

Nếu tôi hiểu đúng nó sẽ thay thế% s với một chuỗi và nó sẽ chỉ thả ra một % dấu %% s? –

+0

Vâng, đúng vậy. –

+0

cảm ơn bạn rất nhiều :) –

-3

Ý của bạn là để viết:

selectQ = """SELECT * FROM %s WHERE %s = %s;""" % (self.table,self.columnSpecName,idKey) #maybe the idkey should be self.idkey? don't know the rest of the code 

self.db.execute(selectQ) 

và đây chỉ là một sai lầm với định dạng chuỗi?

Btw tại sao bạn viết SQL rõ ràng cho loại công việc này? sử dụng tốt hơn ma thuật sqlalchemy cho thao tác python sql ..

0

Bạn sẽ phải sử dụng thay thế chuỗi để thêm tên bảng và cột, trình điều khiển sẽ chỉ xử lý các thông số.

Ed: NM, Daniel đã trả lời nhanh hơn và hoàn toàn hơn

1

Dưới đây là một ví dụ làm việc toàn

def rtnwkpr(tick, table, col): 

    import MySQLdb as mdb 
    tickwild = tick + '%'  
    try: 
     con = mdb.connect(host, user, password, db); 
     cur = con.cursor() 
     selectq = "SELECT price FROM %s WHERE %s LIKE %%s;" % (table, col) 
     cur.execute(selectq,(tickwild)) 
     return cur.fetchall()   
+0

def inswk (bảng, tổng, ngày, đánh dấu): nhập khẩu MySQLdb như mdb import sys con = Không thử: con = mdb.connect (host, người dùng, mật khẩu, db); cur = con.cursor() selectq = "" "INSERT INTO% s (giá, ngày, ticker) VALUES (%% s, %% s, %% s)" ""% (bảng) cur.execute (selectq, (tổng cộng, ngày, đánh dấu)) –

Các vấn đề liên quan