Pertanyaan Bagaimana cara query database MySQL melalui python menggunakan peewee / mysqldb?


Saya membuat klien iOS untuk App.net dan saya mencoba menyiapkan server notifikasi push. Saat ini aplikasi saya dapat menambahkan id akun App.net pengguna (string angka) dan token perangkat APNS ke database MySQL di server saya. Itu juga dapat menghapus data ini. Saya telah mengadaptasi kode dari dua tutorial ini:

Selain itu, saya sudah beradaptasi skrip python mengagumkan ini untuk mendengarkan API App Stream App.net.

Python saya menghebohkan, seperti pengetahuan MySQL saya. Yang saya coba lakukan adalah mengakses token perangkat APNS untuk akun yang perlu saya beri tahukan. Tabel database saya memiliki dua kolom / kolom untuk setiap entri, satu untuk user_id dan satu untuk device_token. Saya tidak yakin dengan terminologinya, tolong beri tahu saya jika saya bisa mengklarifikasi ini.

Saya sudah mencoba menggunakannya orang kecil untuk membaca dari database tapi saya di atas kepala saya. Ini adalah skrip uji dengan placeholder user_id:

import logging
from pprint import pprint

import peewee
from peewee import *

db = peewee.MySQLDatabase("...", host="localhost", user="...", passwd="...")

class MySQLModel(peewee.Model):
    class Meta:
        database = db

class Active_Users(MySQLModel):
    user_id = peewee.CharField(primary_key=True)
    device_token = peewee.CharField()

db.connect()

# This is the placeholder user_id
userID = '1234' 

token = Active_Users.select().where(Active_Users.user_id == userID)
pprint(token)

Ini kemudian dicetak:

<class '__main__.User'> SELECT t1.`id`, t1.`user_id`, t1.`device_token` FROM `user` AS t1 WHERE (t1.`user_id` = %s) [u'1234']

Jika kode tidak membuatnya jelas, saya mencoba query database untuk baris dengan user_id dari '1234'dan saya ingin menyimpan device_token dari baris yang sama (lagi, mungkin terminologi yang salah) menjadi variabel yang bisa saya gunakan ketika saya mengirim pemberitahuan push nanti di skrip.

Bagaimana cara mengembalikan perangkat_token dengan benar? Juga, apakah lebih mudah untuk melupakan orang lain dan hanya query database menggunakan python-mysqldb? Jika itu masalahnya, bagaimana saya akan melakukan hal itu?


4
2017-12-09 14:45


asal


Jawaban:


Panggilan User.select().where(User.user_id == userID) mengembalikan a User objek tetapi Anda menugaskannya ke variabel yang disebut token karena Anda mengharapkan hanya device_token.

Tugas Anda harus seperti ini:

matching_users = Active_Users.select().where(Active_Users.user_id == userID) # returns an array of matching users even if there's just one
if matching_users is not None:
    token = matching_users[0].device_token

4
2017-12-09 14:55