4

我正在为 App.net 创建一个 iOS 客户端,并且正在尝试设置一个推送通知服务器。目前,我的应用程序可以将用户的 App.net 帐户 ID(一串数字)和 APNS 设备令牌添加到我服务器上的 MySQL 数据库中。它还可以删除这些数据。我改编了这两个教程中的代码:

此外,我已经修改了这个很棒的 python 脚本来监听 App.net 的 App Stream API。

我的 python 太可怕了,我的 MySQL 知识也是如此。我要做的是访问我需要通知的帐户的 APNS 设备令牌。我的数据库表的每个条目都有两个字段/列,一个用于 user_id,一个用于 device_token。我不确定术语,如果我能澄清这一点,请告诉我。

我一直在尝试使用peewee从数据库中读取数据,但我有点不知所措。这是一个带有占位符的测试脚本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)

然后打印出来:

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

如果代码没有说清楚,我正在尝试使用 of 查询数据库中的行,user_id并且1234我想将device_token同一行的行(同样,可能是错误的术语)存储到一个变量中,我可以当我稍后在脚本中发送推送通知时使用。

如何正确返回 device_token?此外,放弃 peewee 并简单地使用 python-mysqldb 查询数据库会更容易吗?如果是这样的话,我将如何去做呢?

4

1 回答 1

4

该调用User.select().where(User.user_id == userID)返回一个User对象,但您将其分配给一个名为的变量token,因为您期望的只是device_token.

你的任务应该是这样的:

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
于 2013-12-09T14:55:14.577 回答