V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
bb2018
V2EX  ›  程序员

一条信息 标题 栏目 内容放在三个表里。用什么样的语句用 mysql 语句插入一条信息? 同时向三个表。

  •  
  •   bb2018 · 2017-11-24 13:50:52 +08:00 · 2415 次点击
    这是一个创建于 2562 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我用 scrapy 采集到数据。
    采集的数据有: 标题 时间 栏目 内容 网址等等

    那么我用什么 mysql 语句同时插入帝国 cms 的新闻数据表?
    如果写一个语句插入一个表。我会写~

    但是帝国 cms 的新闻数据是放在:

    phome_ecms_news  有  id classid   newspath   titleurl    title   newstime  等字段

    phome_ecms_news_data_1 有 id classid newstext 等字段

    phome_ecms_news_index 有 id classid newstime 等字段


    怎么样写一个 sql 语句插入一条信息啊?向这三个表!
    15 条回复    2017-11-29 14:25:22 +08:00
    p2pCoder
        1
    p2pCoder  
       2017-11-24 14:09:44 +08:00
    写个存储过程?
    本质上 都是 向三个表 分别插入记录,没啥区别
    qiayue
        2
    qiayue  
       2017-11-24 14:10:44 +08:00
    或者简单点,用事务,然后三条 sql
    shenhhd
        3
    shenhhd  
       2017-11-24 14:25:23 +08:00
    建立一个视图,向视图里插入!
    bb2018
        4
    bb2018  
    OP
       2017-11-24 14:28:22 +08:00
    @p2pCoder
    sql = 'INSERT INTO `phome_ecms_news` (classid, title, newstime) VALUES (%s, %s, %s)'value = (item['infotypeid'], item['infotitle'], item['addtime'])
    sql = 'INSERT INTO `phome_ecms_news_data_1` (classid, newstext) VALUES (%s, %s)' value = (item['infotypeid'], item['infocontent'])
    sql = 'INSERT INTO `phome_ecms_news_index` (classid, newstime) VALUES (%s, %s)' value = (item['infotypeid'], iitem['addtime'])
    conn.execute(sql, value)

    这样子?
    bb2018
        5
    bb2018  
    OP
       2017-11-24 14:28:40 +08:00
    @qiayue

    sql = 'INSERT INTO `phome_ecms_news` (classid, title, newstime) VALUES (%s, %s, %s)'value = (item['infotypeid'], item['infotitle'], item['addtime'])
    sql = 'INSERT INTO `phome_ecms_news_data_1` (classid, newstext) VALUES (%s, %s)' value = (item['infotypeid'], item['infocontent'])
    sql = 'INSERT INTO `phome_ecms_news_index` (classid, newstime) VALUES (%s, %s)' value = (item['infotypeid'], iitem['addtime'])
    conn.execute(sql, value)
    bb2018
        6
    bb2018  
    OP
       2017-11-24 14:31:28 +08:00
    @shenhhd
    新手。不明白。什么视图?
    p2pCoder
        7
    p2pCoder  
       2017-11-24 14:35:01 +08:00
    @bb2018
    try:

    cursor.execute(insertSQL1)
    cursor.execute(insertSQL2)
    cursor.execute(insertSQL3)
    cursor.close()
    conn.commit()
    except Exception, e:
    cursor.close()
    conn.rollback()

    这是事务的方式
    bb2018
        8
    bb2018  
    OP
       2017-11-24 15:04:37 +08:00
    @p2pCoder

    try:
    cursor.execute( 'INSERT INTO `phome_ecms_news` (classid, title, newstime) VALUES (%s, %s, %s)'value = (item['infotypeid'], item['infotitle'], item['addtime']))
    cursor.execute('INSERT INTO `phome_ecms_news_data_1` (classid, newstext) VALUES (%s, %s)' value = (item['infotypeid'], item['infocontent']) )
    cursor.execute('INSERT INTO `phome_ecms_news_index` (classid, newstime) VALUES (%s, %s)' value = (item['infotypeid'], iitem['addtime']) )
    cursor.close()
    conn.commit()
    except Exception, e:
    cursor.close()
    conn.rollback()

    这个样子差不多?
    p2pCoder
        9
    p2pCoder  
       2017-11-24 15:05:55 +08:00
    @bb2018 恩,这样 可以保证 同时 成功 或者 失败
    bb2018
        10
    bb2018  
    OP
       2017-11-24 15:16:17 +08:00
    @p2pCoder
    ok 多谢
    晚上我测试一下试试。
    bb2018
        11
    bb2018  
    OP
       2017-11-25 21:03:53 +08:00
    @p2pCoder

    这样不成功。
    我用下面的方式:
    sql = 'INSERT INTO `dede_archives` (typeid, title, pubdate, voteid, infourl, ) VALUES (%s, %s, %s, %s, %s)'
    value = (item['infotypeid'], item['infotitle'], item['addtime'], 0, item['infourl'])
    conn.execute(sql, value)
    sql = 'INSERT INTO `dede_addonarticle` (aid, body) VALUES (%s, %s)'
    value = (item['infotypeid'], item['infocontent'], )
    conn.execute(sql, value)

    可以插入数据库
    但是那两个表各有一个 id 字段,不能设成自增的。
    那空上 id 字段该怎么赋值呢?
    bb2018
        12
    bb2018  
    OP
       2017-11-25 21:33:14 +08:00
    @shenhhd

    能说的明确一点不? 或者给个示例。谢谢。
    shenhhd
        13
    shenhhd  
       2017-11-26 21:25:57 +08:00
    @bb2018
    先在 MySQL 中建立视图
    create view view_name as select * from phome_ecms_news_index as index left join phome_ecms_news as news on index.id=news.id left join phome_ecms_news_data_1 as data_1 on index.id=data_1.id;
    然后向视图插入看看可以不
    insert into view_name(......) values(......);
    bb2018
        14
    bb2018  
    OP
       2017-11-29 14:05:37 +08:00
    @shenhhd
    这个思路是对的。但是我水平太低。最近正在补 mysql 的知识。看完教程再来试验一下结果。
    bb2018
        15
    bb2018  
    OP
       2017-11-29 14:25:22 +08:00
    @shenhhd

    还有一个问题是这三张表里的 id 都不是自增的。
    看上面你写的视图没有 id 相关的, 在插入视图的时候怎么处理?就是 id 怎么赋值?
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2584 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 01:33 · PVG 09:33 · LAX 17:33 · JFK 20:33
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.