سؤال

أرغب في التحقق مما إذا كان البريد الإلكتروني موجودًا في قاعدة البيانات الخاصة بي في AppEngine ، وإذا لم يكن الأمر كذلك: أدخله في مخزن البيانات.

أنا جديد على بيثون.لماذا هذا الرمز البسيط لا يعمل؟ (أيضًا إذا كانت هناك طريقة أفضل/طريقة أكثر كفاءة لكتابة هذا ، من فضلك قل لي)

(أحصل على الخطأ: BadargumentError: حجج موضعية غير مستخدمة [1])

class EmailAdd(webapp.RequestHandler):
def get(self):
    query = db.GqlQuery("SELECT * FROM EmailDatabase WHERE emailaddress=':1'", self.request.get('emailaddress'))
    result = query.get()
    if result is None:
        newemail = EmailDatabase()
        newemail.emailaddress = self.request.get('emailaddress')
        newemail.put()

وللمرجوع ، هذا هو صف DB:

class EmailDatabase(db.Model):
     emailaddress = db.StringProperty()
     date = db.DateTimeProperty(auto_now_add=True)
هل كانت مفيدة؟

المحلول

لا تحتاج إلى استخدام علامات الاقتباس عند ربط معلمة بالاستعلام:

query = db.GqlQuery("SELECT * FROM EmailDatabase WHERE emailaddress = :1", self.request.get('emailaddress'))

وإلا فإنه سيقرأها كسلسلة ولا تُرجع فقط الكائنات التي لديها :1 كقيمة البريد الإلكتروني الخاصة بهم.

أيضًا ، تأكد من التحقق من صحة إدخال المستخدم (self.request.get('emailaddress')) قبل إدخاله في الاستعلام.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top