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

2017-11-24 13:50:52 +08:00
 bb2018
我用 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 语句插入一条信息啊?向这三个表!
2408 次点击
所在节点    程序员
15 条回复
p2pCoder
2017-11-24 14:09:44 +08:00
写个存储过程?
本质上 都是 向三个表 分别插入记录,没啥区别
qiayue
2017-11-24 14:10:44 +08:00
或者简单点,用事务,然后三条 sql
shenhhd
2017-11-24 14:25:23 +08:00
建立一个视图,向视图里插入!
bb2018
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
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
2017-11-24 14:31:28 +08:00
@shenhhd
新手。不明白。什么视图?
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
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
2017-11-24 15:05:55 +08:00
@bb2018 恩,这样 可以保证 同时 成功 或者 失败
bb2018
2017-11-24 15:16:17 +08:00
@p2pCoder
ok 多谢
晚上我测试一下试试。
bb2018
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
2017-11-25 21:33:14 +08:00
@shenhhd

能说的明确一点不? 或者给个示例。谢谢。
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
2017-11-29 14:05:37 +08:00
@shenhhd
这个思路是对的。但是我水平太低。最近正在补 mysql 的知识。看完教程再来试验一下结果。
bb2018
2017-11-29 14:25:22 +08:00
@shenhhd

还有一个问题是这三张表里的 id 都不是自增的。
看上面你写的视图没有 id 相关的, 在插入视图的时候怎么处理?就是 id 怎么赋值?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/409201

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX