精华内容
下载资源
问答
  • Python mysql获取主键id

    千次阅读 2018-04-25 22:41:35
    有这么一段需求,插入数据后,获取返回的主键id,首次可以获取到,第二次插入失败,就获取不到主键id了。其实我们可以这样实现: (一)需求: 例子: 我们将name , plat(平台)为唯一主键, 因为name 在不...

    用到的mysql语句主要为:

    author_id = cursor.lastrowid
    相等于 : author_id = conn.insert_id()

    有这么一段需求,插入数据后,获取返回的主键id,首次可以获取到,第二次插入失败,就获取不到主键id了。其实我们可以这样实现:

    (一)需求:

    例子:

    我们将name , plat(平台)为唯一主键,

    因为name 在不同platform上可能相同,所以对于不同platform的name,我们都要将name存进去,是同一platform的name 就不再进行第二次存入

    (二)Python代码实现:

    # 1 先进行查询是否存在
    # 2 再进行更新操作(其实这一步可以不用的)
    # 3 对数据进行插入
    
    author_id = None
    ## (一)insert into mysql
    try:
        # 查重处理
        self.cursor.execute("""select author_id from tb_author where name = %s and platform = %s """,
                       [item['name'], item['platform']])
        # 是否有重复数据
        repetition = self.cursor.fetchone()
        # 重复
        if repetition:
            if len(repetition) > 0:
                author_id = repetition[0]
        else:
            # 更新
            result_code = self.cursor.execute(
                "UPDATE  tb_author set avatar=%s,type=%s,fans_count=%s,scan_count=%s,collect_count=%s,is_delete=%s where tb_author.name = %s and tb_author.platform = %s",
                [item['avatar'], item['type'], item['fans_count'], item['scan_count'], item['collect_count'],
                 item['is_delete'], item['name'], item['platform']])
            # 第一次插入
            if not result_code:
                self.cursor.execute(
                    "insert into tb_author (name,platform,avatar,type,fans_count,scan_count,collect_count,is_delete,gmt_create,gmt_modified) values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)",
                    (item['name'], item['platform'], item['avatar'], item['type'], item['fans_count'],
                     item['scan_count'], item['collect_count'], item['is_delete'], item['gmt_create'],
                     item['gmt_modified']))
                author_id = self.cursor.lastrowid
        print('author_id ==== > ',author_id)
    except Exception as e:
        print('inser mysql error ---> ',e)
    self.conn.commit()
    self.cursor.close()
    self.conn.close()
    
    
    展开全文
  • mybatis的insert元素属性详解 及 在insert插入数据获取主键id的值

    纯转载文章,原文地址:http://blog.csdn.net/a281246240/article/details/53463620

    其属性如下:

       parameterType ,入参的全限定类名或类型别名

       keyColumn ,设置数据表自动生成的主键名。对特定数据库(如PostgreSQL),若自动生成的主键不是第一个字段则必须设置

       keyProperty ,默认值unset,用于设置getGeneratedKeys方法或selectKey子元素返回值将赋值到领域模型的哪个属性中

       useGeneratedKeys ,取值范围true|false(默认值),设置是否使用JDBC的getGenereatedKeys方法获取主键并赋值到keyProperty设置的领域模型属性中。MySQL和SQLServer执行auto-generated key field,因此当数据库设置好自增长主键后,可通过JDBC的getGeneratedKeys方法获取。但像Oralce等不支持auto-generated key field的数据库就不能用这种方法获取主键了

       statementType ,取值范围STATEMENT,PREPARED(默认值),CALLABLE

       flushCache ,取值范围true(默认值)|false,设置执行该操作后是否会清空二级缓存和本地缓存

       timeout ,默认为unset(依赖jdbc驱动器的设置),设置执行该操作的最大时限,超时将抛异常

       databaseId ,取值范围Oracle|mysql等,表示数据库厂家,元素内部可通过`<if test="_databaseId = 'oracle'">`来为特定数据库指定不同的sql语句


    selectKey子元素详解

      作用:在insert元素和update元素中插入查询语句。

      其属性如下:

         keyProperty ,默认值unset,用于设置getGeneratedKeys方法或selectKey子元素返回值将赋值到领域模型的哪个属性中

         resultType ,keyPropety所指向的属性类全限定类名或类型别名

         order属性 ,取值范围BEFORE|AFTER,指定是在insert语句前还是后执行selectKey操作

         statementType ,取值范围STATEMENT,PREPARED(默认值),CALLABLE

    注意:selectKey操作会将操作查询结果赋值到insert元素的parameterType的入参实例下对应的属性中。并提供给insert语句使用

    ------------------------------------------------------------------------------------

    MyBatis在insert插入操作时返回主键ID的配置

    很多时候,在向数据库插入数据时,需要保留插入数据的id,以便进行后续的update操作或者将id存入其他表作为外键。

    但是,在默认情况下,insert操作返回的是一个int值,并且不是表示主键id,而是表示当前SQL语句影响的行数。。。

    接下来,我们看看MyBatis如何在使用MySQL和Oracle做insert插入操作时将返回的id绑定到对象中。

    MySQL用法:

    <insert id="insert" parameterType="com.test.User"  keyProperty="userId" useGeneratedKeys="true" >

    上面配置中,“keyProperty”表示返回的id要保存到对象的那个属性中,“useGeneratedKeys”表示主键id为自增长模式。

    MySQL中做以上配置就OK了,较为简单,不再赘述。

    Oracle用法:

    复制代码
    <insert id="insert" parameterType="com.test.User">
       <selectKey resultType="INTEGER" order="BEFORE" keyProperty="userId">  
           SELECT SEQ_USER.NEXTVAL as userId from DUAL
       </selectKey> 
        insert into user (user_id, user_name, modified, state)
        values (#{userId,jdbcType=INTEGER}, #{userName,jdbcType=VARCHAR},  #{modified,jdbcType=TIMESTAMP}, #{state,jdbcType=INTEGER})
    </insert>
    复制代码

    Oracle用法中,需要注意的是:由于Oracle没有自增长一说法,只有序列这种模仿自增的形式,所以不能再使用“useGeneratedKeys”属性。

    而是使用<selectKey>将ID获取并赋值到对象的属性中,insert插入操作时正常插入id。

    展开全文
  • mybatis获取主键id

    2018-09-07 08:43:32
    insert id="insert" parameterType="com.pinyougou.pojo.TbSpecification" &gt; &lt;selectKey resultType="java.lang.Long" order="AFTER" keyProperty="id...

    <insert id="insert" parameterType="com.pinyougou.pojo.TbSpecification" >

    <selectKey resultType="java.lang.Long" order="AFTER" keyProperty="id">
    SELECT LAST_INSERT_ID() AS id
    </selectKey>

    insert into tb_specification (id, spec_name)
    values (#{id,jdbcType=BIGINT}, #{specName,jdbcType=VARCHAR})

    </insert>


     

    展开全文
  • 最近插入一条数据同时,想获取新插入数据的主键id(注意:主键值是自动生成的),实现方法如下: 对象: public class People{ .... private Integer id; private String name; public Integer getId() { ...

    最近插入一条数据同时,想获取新插入数据的主键id(注意:主键值是自动生成的),实现方法如下:

    对象:
    public class People{
      ....
    
    private Integer id;
    private String name;
    
    public Integer getId() {
        return id;
    }
    
    public void setId(Integer id) {
        this.id = id;
    }
    
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    .....
    }

    插入此对象:

    useGeneratedKeys:自动生成主键

    keyProperty:对象中的属性一致

    <insert id="insert" parameterType="com.test.People" useGeneratedKeys="true" keyProperty="id">
        insert into people (id, name)
        values (#{id,jdbcType=INTEGER}, #{name,jdbcType=VARCHAR})
      </insert>

    展开全文
  • MyBatis 插入的同时获取主键id

    千次阅读 2018-11-01 16:02:14
    有时候进行一些多步操作的时候就需要得到最新插入一条记录的id号,那么如何在插入的同时返回id号   Mapper代码: &lt;insert id="insertFeeds" parameterType="com.yj.pojo.Feeds" ...
  • Mybatis批量插入返回自增主键: 对于支持生成自增主键的数据库:useGenerateKeys和keyProperty 不支持生成自增主键的...create sequence ARCHIVES_SEQ_ID start with 1 increment by 1 minvalue 1 nomaxva...
  • 但是子任务需要主任务的ID,而主任务的ID是数据库自增的主键,那怎么获取呢? 需要在Mybatis的插入语句前加入这一句话。 <selectKey resultType="java.lang.Long" keyProperty="ID" order="AFTER" > SELECT ...
  • 增删改同时获取主键id

    千次阅读 2016-06-07 10:54:07
     项目中遇到这么一个问题,在做数据库的插入操作时我同时还需要查出主键id,如果写两个方法固然可以,但是也有更简便的实现方式,下面分享给大家。 代码 public int Add(B_0003Info entity) { try { ...
  • 今天插入数据后想得要得到其自增的主键id,用来进行其他操作,网上找了很多办法,这里做一下总结 用@Options注解: 代码如下: @Insert("INSERT INTO sp_attribute(attr_name,cat_id,attr_sel,attr_write,attr_vals,...
  • Mybatis + Mysql插入后获取主键id

    千次阅读 2016-09-21 14:25:21
    使用MyBatis往MySQL数据库中插入一条记录后,需要...在insert的标签里加两个属性:useGeneratedKeys="true" keyProperty="id" ,这个keyProperty的id就是我们要返回的主键id insert into t_message( id, m_title
  • 在我们执行insert操作的时候,往往会需要拿到新插入数据的主键id做下一步操作。 例: //新增银行卡 BankCard bankCard = new BankCard(); bankCard.setBankCardRealName(bankCardRequest.getRealName()); ...
  • 项目中多处使用原生JDBC进行数据插入,进行数据insert时会预先生成一个id主键再进行插入,并通过Statement.RETURN_GENERATED_KEYS的方式返回主键id,都能获取正确结果。偶然一次使用该方式对返回值进行处理时,获取...
  • 有一个很常见的需求,即添加记录后获取添加后的主键ID,特别是在一次前端调用中需要插入多个表的场景。除了添加单条记录时获取主键值,有时候可能需要获取批量添加记录时各记录的主键值,MyBatis从3.3.1版本开始支持...
  • 在使用ThinkPHP新增数据后可以很方便的获取自动增长型的主键值。  $Model = D(‘Blog’); $data['name'] = ’test’; $data['title'] = ’测试标题’; $data['content'] = ’测试内容’; $result = ...
  • 数据库中插入一条记录后获取主键id

    千次阅读 2014-07-07 17:54:18
     id="insert" keyProperty="adId" parameterType="com.zhdm.pojo.Advertise"> ...//获取插入的id  resultType="java.lang.Long" order="AFTER" keyProperty="adId"> SELECT LAST_INSERT_ID()
  • mybatis获取自增主键id

    2017-03-22 15:31:24
    1.当插入一条数据时,ID要作为另外一个表的外键插入时,需要...//获取主键ID放到userid insert into sys_user ( UserName) values (#{username})   3.如果传递参数是map,则生成的主键值consultation_id放到map中
  • MySQL获取自增主键Id

    千次阅读 2020-02-11 16:37:52
    mysql和oracle插入的时候有一个很大的区别是,oracle通过获取序列的方式得到主键,mysql本身有一个列可以做自增长字段,mysql在插入一条数据后,如何能获得到这个自增id的值呢? 方法1:使用last_insert_id mysql...
  • Hibernate jpa获取自增主键Id

    千次阅读 2019-06-24 12:11:14
    有场景需要保存实体后获取实体的主键进行下一步的操作。 经过查询资料以及参考通过修改主键注解的方式。即 @DocumentId @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; 实际就是...
  • MyBatis Insert获取自增主键ID

    千次阅读 2016-09-17 11:13:28
    使用Hibernate的时候,insert插入可以很简单的获取自增主键ID。而使用MyBatis有insert select delete等操作,并没有直接获取自增主键的操作,需要手动配置。 1:public interface IAdminDao /** * 插入Admin *...
  • mybatis的mapper.xml获取自增主键id

    千次阅读 2020-05-20 17:01:57
    通常,我们会把数据库中一个表的主键id设置为自增字段。 在mybatis中,当主键id是自增的情况下,添加一条记录的同时,其主键id是不能使用的,当我们取出主键id的值发现id为null,但是有时我们需要该主键,这时我们该...
  • 问题:保存主表对象的时候,主键ID是随机生成的,那么保存这个对象之后如何查询出刚才保存的主表对象,因此也就没有办法保存从表(因为从表的外键要根据刚才主表的ID获取)   解决办法如下: Sample sample = ...
  • 如果想获取主键自增id,除了插入记录之后再查询之外,也可以使用mybatis提供的两种方式: 一是mybatis自动生成的sql语句: <insert id="insertSelective" parameterType="cn.tencent.eee.aaa.dao.model.User">...
  • 一 . MyBatis mapper.xml文件中在xml 1. 加入这句 :... keyProperty="数据库中的主键字段名对应的实体类字段名" ;【填实体类字段名】 <insert id="insertSelective" parameterType="com.tc.lvm...
  • 1. XML方案 ... 注意: keyProperty="数据库中的主键字段名对应的实体类字段名" ;【填实体类字段名】 <insert id="insertSelective" parameterType="com.yc.Student" useGeneratedKeys="true" keyP...
  • jdbc获取自增主键ID

    千次阅读 2019-04-27 15:10:42
    public static void main(String[] args) { //声明Connection对象 Connection con;... System.out.println("id="+id); } catch (Exception e) { e.printStackTrace(); } }    
  • mybatis获取主键方法

    2019-10-24 10:51:41
    mybatis获取非自增主键方法 数据库的创建语句 CREATE TABLE `supply` ( `id` bigint(20) NOT NULL, -- id为非自增 ... ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='活动补给包' mapper.xml映射文件的写法 <...
  • Spring JdbcTemplate利用GeneratedKeyHolder提供了一个方法,可以实现在插入一条记录时,返回自增主键的id ...利用GeneratedKeyHolder接口中的方法getKey()即可获取自增主键ID,getKey()方法的...
  • * 测试插入数据获取主键 */ @Test public void testInsertReturnId() { Employee employee = new Employee(); employee.setName("霸道获取主键"); employee.setAge(23); employee.setEmail("123@163....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 170,612
精华内容 68,244
关键字:

获取主键id