在已记录用户的列中插入数据,以检查谁在python中更新/创建

时间:2015-11-13 08:06:40

标签: python mysql

我有疑问:

"INSERT INTO mappings (id, service, created_at) 
        VALUES(%s,%s)" % (id, service)

这里我想在created_at列值下插入有关登录用户的信息。

不想使用日期和时间。 有人可以帮我这个吗?

1 个答案:

答案 0 :(得分:0)

我使用以下函数获取用户名。

DROP FUNCTION IF EXISTS `GETUSERNAME`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` FUNCTION `GETUSERNAME`() RETURNS char(16) CHARSET utf8
BEGIN
  RETURN (SELECT
    SUBSTRING_INDEX(USER(), '@', 1));
END
;;
DELIMITER ;

此函数解析USER()结果并将用户名与用户主机分开。如果您想获得主持人,请使用SUBSTRING_INDEX(USER(), '@', -1)。然后插入一条记录

INSERT INTO `mappings` (`id`, `service`, `created_at`) 
VALUES(:param1, :param2, GETUSERNAME());

或代码的副本:

"INSERT INTO mappings (id, service, created_at) 
        VALUES(%s,%s,GETUSERNAME())" % (id, service)

您也可以在插入前触发器中执行此操作。那将是

DELIMITER ;;
CREATE TRIGGER `trbinsertmappings` BEFORE INSERT ON `mappings` 
FOR EACH ROW BEGIN
  SET NEW.created_at=GETUSERNAME();
END
;;
DELIMITER ;

如果你需要一个id,那么我使用相似的功能:

DROP FUNCTION IF EXISTS `GETUSERID`;
DELIMITER ;;
CREATE DEFINER=`root`@`localhost` FUNCTION `GETUSERID`() RETURNS int(10)
BEGIN
  DECLARE   id_no INT DEFAULT -1;
  select `id` 
  INTO id_no 
  FROM `tstaff` 
  WHERE `tstaff`.`user_name`=(SELECT SUBSTRING_INDEX(USER(), '@', 1)) 
  LIMIT 1;

  RETURN id_no;
END
;;
DELIMITER ;