当前位置:网站首页>数据库多表关联插入数据
数据库多表关联插入数据
2022-08-05 05:55:00 【左左才】
题引
在往数据库插入数据过程中,若需要往多表插入数,且多表存在依赖关系,这个时候插入数据分析过于麻烦
例如我有三张表:
- 我想往这几张表里插入数据,但是有些关系是强关联
- 表结构附: 构思数据库
备注: 该方法不是最优的,可以暂时满足多表插入之间的关联,后续若有需求在改进
INSERT INTO film_details_table (film_id,film_details,film_photo,film_rating,film_type,film_specification,film_region,film_duration,release_date,updated_time) VALUES
('90020220619192851775',' 30年前奥姆尼康电视制作公司收养了一名婴儿,他们刻意培养他使其成为全球最受欢迎的纪实性肥皂剧《楚门的世界》中的主人公,公司为此取得了巨大的成功。然而这一切却只有一人全然不知,他就是该剧的唯一主角——楚门。楚门从小到大一直生活在一座叫桃源岛的小城 (实际上是一座巨大的摄影棚),他是这座小城里的一家保险公司的经纪人,楚门看上去似乎过着与常人完全相同的生活,但他却不知道生活中的每一秒钟都有上千部摄像机在对着他,每时每刻全世界都在注视着他,更不知道身边包括妻子和朋友在内的所有人都是《楚门的世界》的演员。虽然感觉到每个人似乎都很注意他,而且从小到大所做的每一件事却都有着一些意想不到的戏剧性的效果, 但这些都没有使这位天性淳朴的小伙子太过于在意。可节目的制作组由于一时的疏忽,竟让在楚门小时候因他而“死”的“父亲”再次露面,“父亲”立即被工作人员带走,直到楚门悲痛万分开始怀疑后他们编织了一个完美的谎言让他们“父子”相见,从而达到他们满意的效果。多年前一位既是《楚门的世界》的忠实观众又是该节目群众演员的年轻姑娘施维亚十分同情楚门,楚门对她一见钟情。她给了楚门一些善意的暗示,自己却被强行带离片场。回忆起施维亚的楚门开始重新认识自己的生活。渐渐地楚门发现他工作的公司每一个人都在他出现后才开始真正的工作,他家附近的路上每天都有相同的人和车在反复来往,更让他不敢相信的是,自称是医生并每天都去医院工作的妻子竟不是医生。楚门开始怀疑他所生活的这个世界,包括他妻子、朋友、父亲等所有的人都在骗他,一种发自内心的恐惧油然而生。痛定思痛,他决定不惜一切代价逃出海景这个令他噤若寒蝉的小城,去寻找属于自己真正的生活和真正爱他的人。然而,楚门却低估了集这个肥皂剧的制作人、导演和监制大权于一身的克里斯托弗的力量。克里斯托弗将一切都设计得近乎完美,近30年里牢牢地把楚门控制在海景的超现实世界之中。几次逃脱都失败后,楚门决定从海上离开这座小城,然而他却绝望地发现他面前的大海和天空竟然也是这个巨大摄影棚的一部分,这时克里斯托弗在天上巨大的控制室里向楚门讲述了事情的来龙去脉,并告诉楚门他如今已经是世界上最受欢迎的明星,他今天所取得的一切是常人无法想象的,如果他愿留在海景就可继续明星生活,楚门不为所动,毅然走向远方的自由之路 。 ','https://p0.meituan.net/movie/[email protected]_644h_1e_1c','9.0',NULL,'剧情','美国','103 分钟','','2022-06-19 19:28:51');
INSERT INTO film_info_table (film_id,film_name,updated_time) VALUES
('90020220619192851775','楚门的世界 - The Truman Show','2022-06-19 19:28:51');
INSERT INTO film_type (film_id,film_type) VALUES
('90020220619192851775','科幻');
脚本
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Author : chairDu
# @Email : [email protected]
# @File : demo.py
# @DataTime : 2022-07-22 05:10:00
# @Description : 多表并联关系插入数据
import os
import re
import sys
sys.path.append(os.path.dirname(os.path.dirname(__file__)))
# 设置桌面地址为全局变量
global fil_path
fil_path = "G:\\OneDrive\\桌面\\"
# 输入多条插入sql
sql111 = """ INSERT INTO film_details_table (film_id,film_details,film_photo,film_rating,film_type,film_specification,film_region,film_duration,release_date,updated_time) VALUES ('90020220619192851775',' 30年前奥姆尼康电视制作公司收养了一名婴儿,他们刻意培养他使其成为全球最受欢迎的纪实性肥皂剧《楚门的世界》中的主人公,公司为此取得了巨大的成功。然而这一切却只有一人全然不知,他就是该剧的唯一主角——楚门。楚门从小到大一直生活在一座叫桃源岛的小城 (实际上是一座巨大的摄影棚),他是这座小城里的一家保险公司的经纪人,楚门看上去似乎过着与常人完全相同的生活,但他却不知道生活中的每一秒钟都有上千部摄像机在对着他,每时每刻全世界都在注视着他,更不知道身边包括妻子和朋友在内的所有人都是《楚门的世界》的演员。虽然感觉到每个人似乎都很注意他,而且从小到大所做的每一件事却都有着一些意想不到的戏剧性的效果, 但这些都没有使这位天性淳朴的小伙子太过于在意。可节目的制作组由于一时的疏忽,竟让在楚门小时候因他而“死”的“父亲”再次露面,“父亲”立即被工作人员带走,直到楚门悲痛万分开始怀疑后他们编织了一个完美的谎言让他们“父子”相见,从而达到他们满意的效果。多年前一位既是《楚门的世界》的忠实观众又是该节目群众演员的年轻姑娘施维亚十分同情楚门,楚门对她一见钟情。她给了楚门一些善意的暗示,自己却被强行带离片场。回忆起施维亚的楚门开始重新认识自己的生活。渐渐地楚门发现他工作的公司每一个人都在他出现后才开始真正的工作,他家附近的路上每天都有相同的人和车在反复来往,更让他不敢相信的是,自称是医生并每天都去医院工作的妻子竟不是医生。楚门开始怀疑他所生活的这个世界,包括他妻子、朋友、父亲等所有的人都在骗他,一种发自内心的恐惧油然而生。痛定思痛,他决定不惜一切代价逃出海景这个令他噤若寒蝉的小城,去寻找属于自己真正的生活和真正爱他的人。然而,楚门却低估了集这个肥皂剧的制作人、导演和监制大权于一身的克里斯托弗的力量。克里斯托弗将一切都设计得近乎完美,近30年里牢牢地把楚门控制在海景的超现实世界之中。几次逃脱都失败后,楚门决定从海上离开这座小城,然而他却绝望地发现他面前的大海和天空竟然也是这个巨大摄影棚的一部分,这时克里斯托弗在天上巨大的控制室里向楚门讲述了事情的来龙去脉,并告诉楚门他如今已经是世界上最受欢迎的明星,他今天所取得的一切是常人无法想象的,如果他愿留在海景就可继续明星生活,楚门不为所动,毅然走向远方的自由之路 。 ','https://p0.meituan.net/movie/[email protected]_644h_1e_1c','9.0',NULL,'剧情','美国','103 分钟','','2022-06-19 19:28:51'); INSERT INTO film_info_table (film_id,film_name,updated_time) VALUES ('90020220619192851775','楚门的世界 - The Truman Show','2022-06-19 19:28:51'); INSERT INTO film_type (film_id,film_type) VALUES ('90020220619192851775','科幻'); """
def createInsertSql(_sql):
_path = "{0}insert.sql".format(fil_path)
fil = open(file=_path, mode="w+", encoding="utf-8")
_sql = re.sub("\n|\t", '', _sql).lower() # 去除换行符,制表符,并转换小写
sqlList = re.split(";", _sql)[0:-1] # 分割取出所有插入sql生成insert格式
allKey = [] # 所有字段
noRepetitionKey = [] # 所有不重复字段
repetitionKey = [] # 所有重复字段
setSql = {
} # 设置变量sql
insertSql = {
}
for sql in sqlList: # 汇总所有字段
allKey += re.split(",", re.split("\(|\)", sql)[1])
for i in range(len(allKey) - 1): # 分别得出重复字段,不重复字段
for y in range(i + 1, len(allKey)):
if allKey[i] == allKey[y] and allKey[i] not in repetitionKey:
repetitionKey.append(allKey[i])
elif allKey[i] != allKey[y] and allKey[i] not in repetitionKey and allKey[i] not in noRepetitionKey:
noRepetitionKey.append(allKey[i])
elif allKey[i] != allKey[y] and allKey[y] not in repetitionKey and allKey[y] not in noRepetitionKey:
noRepetitionKey.append(allKey[y])
noRepetitionKey = list(set(noRepetitionKey) - set(repetitionKey))
for sql in sqlList: # 得出sql
splitSql = re.split("\(|\)", sql)
tableName = re.sub(r"insert.*into", "", splitSql[0]).strip() # 数据库表名
sqlKey = splitSql[1]
sqlKeyList = re.split(",", sqlKey)
sqlValueList = re.split(",", splitSql[3])
for i in range(len(sqlKeyList)):
if sqlKeyList[i] in repetitionKey:
_setSql = {
sqlKeyList[i]: ("\nset @{0} = {1} ;".format(sqlKeyList[i], sqlValueList[i]))}
setSql.update(_setSql)
sqlKeyList[i] = "@{0}".format(sqlKeyList[i])
insertSelectSql = "\n{0}({1}) \nselect {2} \nfrom {3} limit 1 ;".format(splitSql[0], sqlKey, ','.join(sqlKeyList), tableName) # 生成插入sql\
tableNames = "-- {0}".format(tableName)
__sql = {
tableNames: insertSelectSql}
insertSql.update(__sql)
# 插入数据
noRepetitionCont = "\n\n\n-- 不重复的字段: {0}".format(','.join(noRepetitionKey))
fil.write(noRepetitionCont)
repetitionCont = "\n-- 重复的字段: {0}\n".format(','.join(repetitionKey))
fil.write(repetitionCont)
for i in setSql.values():
fil.write(i)
print(".", end="")
for i in insertSql.keys():
fil.write("\n\n\n")
fil.write(i)
fil.write(insertSql.get(i))
print(".",end="")
fil.close()
return 1
if __name__ == '__main__':
createInsertSql(sql111)
结果
边栏推荐
猜你喜欢
随机推荐
Transformer interprets and predicts instance records in detail
【2022 DSCTF决赛wp】
【8】Docker中部署Redis
Chengyun Technology was invited to attend the 2022 Alibaba Cloud Partner Conference and won the "Gathering Strength and Going Far" Award
Some basic method records of commonly used languages in LeetCode
技术分析模式(九)三重顶部和底部
2022杭电多校六 1007-Shinobu loves trip(同余方程)
文件内音频的时长统计并生成csv文件
numpy.random使用文档
农场游戏果园系统+牧场养殖系统+广告联盟模式流量主游戏小程序APP V1
What is the website ICP record?
D46_Force applied to rigid body
亚马逊美国站:马术头盔CPC认证标准要求
LabVIEW中如何实现任意形状的不规则按键
After docker is deployed, mysql cannot connect
System basics - study notes (some command records)
reduce()方法的学习和整理
D39_ coordinate transformation
Matplotlib plotting notes
What is Alibaba Cloud Express Beauty Station?