一样先从建立表格开始,这张表格除了储存来自Line的使用者资讯,也预留了未来资料的输入栏位
栏位 | 说明 |
---|---|
uid | Line使用者ID |
displayName | Line显示名称 |
language | zh-hant、en-us.... |
pictureUrl | 使用者大头贴 |
FirstName | 名 |
LastName | 姓 |
phoneNumber | 电话 |
Address | 地址 |
Activate | 启用 |
CREATE TABLE IF NOT EXISTS public.customers
(
uid text COLLATE pg_catalog."default" NOT NULL,
"displayName" text COLLATE pg_catalog."default" NOT NULL,
language text COLLATE pg_catalog."default",
"pictureUrl" text COLLATE pg_catalog."default",
"FirstName" text COLLATE pg_catalog."default",
"LastName" text COLLATE pg_catalog."default",
"phoneNumber" text COLLATE pg_catalog."default",
"Address" text COLLATE pg_catalog."default",
"Activate" boolean DEFAULT true,
CONSTRAINT customers_pkey PRIMARY KEY (uid)
)
TABLESPACE pg_default;
def INS_UPD_cus(self, prof):
# display_name (str) – Display name
# user_id (str) – User ID
# picture_url (str) – Image URL
# status_message (str) – Status message
# language (str) – Get user’s language
cur = self.conn.cursor()
query = sql.SQL("SELECT 1 AS isExists FROM {} WHERE uid = %s").format(sql.Identifier('customers'))
cur.execute(query, ([prof.user_id]))
r = cur.fetchone()
cur.close()
if(not r):
cur = self.conn.cursor()
query = sql.SQL("INSERT INTO {}(uid, \"displayName\", language, \"pictureUrl\") VALUES(%s, %s, %s, %s)").format(sql.Identifier('customers'))
cur.execute(query, (prof.user_id, prof.display_name, prof.language, prof.picture_url))
self.conn.commit()
app.logger.debug(f"New User:{prof.display_name} - {prof.user_id}, Created")
cur.close()
return 1
else:
cur = self.conn.cursor()
query = sql.SQL("UPDATE {} SET \"displayName\"=%s, language=%s, \"pictureUrl\"=%s, \"Activate\"=%s WHERE uid = %s").format(sql.Identifier('customers'))
cur.execute(query, (prof.display_name, prof.language, prof.picture_url, "TRUE", prof.user_id))
self.conn.commit()
app.logger.debug(f"User:{prof.display_name} - {prof.user_id}, UPDATED")
cur.close()
return 2
prof = line_bot_api.get_profile(event.source.user_id)
INS_UPD_cus(prof)
在WebhookHandler被呼叫时,会依据讯息中的user_id搜寻资料库,如果没有这个Line UID,则会新增这个新使用者,反之如果是既有用户,则会更新资料库中使用者的显示名称等资讯
query = sql.SQL("INSERT INTO {}(uid, \"displayName\", language, \"pictureUrl\") VALUES(%s, %s, %s, %s)").format(sql.Identifier('customers'))
为什麽UID不用加双引号「"」,displayName要加,language却又不用加,下一个pictureUrl又要加双引号,答案是大小写,如果你在postgresql中建立了带有大小写的栏位名称,请务必要加上双引号,这困扰了我快2个小时找错误.....
<<: JS Library 学习笔记:首先当然来试试 jQuery (三)
本篇文章的Unreal engine 4 版本为 4.25.3 今天是这30天的UE旅程的最後一天了...
Maltego在Kali里是一套收集资讯用的工具,可以去收集网域的一些公开资讯,也可以去收集像是电子...
LED 显示温湿度 ( DHT11 ) 教学原文参考:LED 显示温湿度 ( DHT11 ) 这篇文...
传送影像地图(Imagemap) client.replyMessage(event.replyTo...
本文同步更新於blog 情境:以下是人脑的运作程序 <?php namespace App...