1. #-*-coding:utf-8-*-
  2. #__author__ = "logan.xu"
  3.  
  4. import sqlalchemy
  5. from sqlalchemy import create_engine,func
  6. from sqlalchemy.ext.declarative import declarative_base
  7. from sqlalchemy import Column,Integer,String,ForeignKey,DATE
  8. from sqlalchemy.orm import sessionmaker,relationship
  9.  
  10. engine=create_engine("mysql+pymysql://root:12345678@localhost/news",encoding='utf-8',echo=True)
  11. Base=declarative_base()
  12.  
  13. class Student(Base):
  14. __tablename__='student'
  15. id=Column(Integer,primary_key=True)
  16. name=Column(String(32),nullable=False)
  17. register_date=Column(DATE,nullable=False)
  18.  
  19. def __repr__(self):
  20. return "<%s name:%s>" % (self.id,self.name)
  21.  
  22. class StudyRecord(Base):
  23. __tablename__ = 'study_record'
  24. id = Column(Integer, primary_key=True)
  25. day = Column(Integer,nullable=False)
  26. status = Column(String(32),nullable=False)
  27. stu_id = Column(Integer,ForeignKey("student.id"))
  28.  
  29. def __repr__(self):
  30. return "<%s name:%s>" % (self.id,self.day)
  31.  
  32. #---------------1.创建表-----------------#

  33. Base.metadata.create_all(engine)

  34. #---------------------------------------#
  35.  
  36. Session_class = sessionmaker(bind=engine)
  37. Session = Session_class()
  38.  
  39. #---------------2.写入数据-----------------#
  40.  
  41. s1=Student(name='Alex',register_date="2019-01-09")
  42. s2=Student(name='Jack',register_date="2019-01-09")
  43. s3=Student(name='Rain',register_date="2019-01-10")
  44. s4=Student(name='Eric',register_date="2019-01-11")
  45. s5=Student(name='John',register_date="2019-01-12")
  46. #
  47. study_obj1=StudyRecord(day=1,status="Yes",stu_id=1)
  48. study_obj2=StudyRecord(day=2,status="NO",stu_id=1)
  49. study_obj3=StudyRecord(day=3,status="Yes",stu_id=1)
  50. study_obj4=StudyRecord(day=1,status="NO",stu_id=2)
  51. study_obj5=StudyRecord(day=1,status="NO",stu_id=2)
  52. #
  53.  
  54. ## 写入数据 并调用 study_record字段插入数据 为 Student数据

  55. Session.add_all([s1,s2,s3,s4,s5,study_obj1,study_obj2,study_obj3,study_obj4,study_obj5])
  56.  
  57. #---------------------------------------#
  58.  
  59. # 执行事务
  60. Session.commit()
  1. /Users/drizzle/PycharmProjects/2018-12-03/venv/bin/python /Users/drizzle/PycharmProjects/2018-12-03/orm_fk.py
  2. 2019-01-08 18:08:40,496 INFO sqlalchemy.engine.base.Engine SHOW VARIABLES LIKE 'sql_mode'
  3. 2019-01-08 18:08:40,496 INFO sqlalchemy.engine.base.Engine {}
  4. 2019-01-08 18:08:40,498 INFO sqlalchemy.engine.base.Engine SHOW VARIABLES LIKE 'lower_case_table_names'
  5. 2019-01-08 18:08:40,498 INFO sqlalchemy.engine.base.Engine {}
  6. 2019-01-08 18:08:40,500 INFO sqlalchemy.engine.base.Engine SELECT DATABASE()
  7. 2019-01-08 18:08:40,500 INFO sqlalchemy.engine.base.Engine {}
  8. 2019-01-08 18:08:40,501 INFO sqlalchemy.engine.base.Engine show collation where `Charset` = 'utf8mb4' and `Collation` = 'utf8mb4_bin'
  9. 2019-01-08 18:08:40,501 INFO sqlalchemy.engine.base.Engine {}
  10. 2019-01-08 18:08:40,504 INFO sqlalchemy.engine.base.Engine SELECT CAST('test plain returns' AS CHAR(60)) AS anon_1
  11. 2019-01-08 18:08:40,504 INFO sqlalchemy.engine.base.Engine {}
  12. 2019-01-08 18:08:40,504 INFO sqlalchemy.engine.base.Engine SELECT CAST('test unicode returns' AS CHAR(60)) AS anon_1
  13. 2019-01-08 18:08:40,504 INFO sqlalchemy.engine.base.Engine {}
  14. 2019-01-08 18:08:40,505 INFO sqlalchemy.engine.base.Engine SELECT CAST('test collated returns' AS
    CHAR CHARACTER SET utf8mb4) COLLATE utf8mb4_bin AS anon_1
  15. 2019-01-08 18:08:40,505 INFO sqlalchemy.engine.base.Engine {}
  16. 2019-01-08 18:08:40,506 INFO sqlalchemy.engine.base.Engine DESCRIBE `student`
  17. 2019-01-08 18:08:40,506 INFO sqlalchemy.engine.base.Engine {}
  18. 2019-01-08 18:08:40,507 INFO sqlalchemy.engine.base.Engine DESCRIBE `study_record`
  19. 2019-01-08 18:08:40,507 INFO sqlalchemy.engine.base.Engine {}
  20. 2019-01-08 18:08:40,511 INFO sqlalchemy.engine.base.Engine BEGIN (implicit)
  21. 2019-01-08 18:08:40,512 INFO sqlalchemy.engine.base.Engine INSERT INTO student (name, register_date) VALUES (%(name)s, %(register_date)s)
  22. 2019-01-08 18:08:40,512 INFO sqlalchemy.engine.base.Engine {'name': 'Alex', 'register_date': '2019-01-09'}
  23. 2019-01-08 18:08:40,513 INFO sqlalchemy.engine.base.Engine INSERT INTO student (name, register_date) VALUES (%(name)s, %(register_date)s)
  24. 2019-01-08 18:08:40,513 INFO sqlalchemy.engine.base.Engine {'name': 'Jack', 'register_date': '2019-01-09'}
  25. 2019-01-08 18:08:40,513 INFO sqlalchemy.engine.base.Engine INSERT INTO student (name, register_date) VALUES (%(name)s, %(register_date)s)
  26. 2019-01-08 18:08:40,514 INFO sqlalchemy.engine.base.Engine {'name': 'Rain', 'register_date': '2019-01-10'}
  27. 2019-01-08 18:08:40,514 INFO sqlalchemy.engine.base.Engine INSERT INTO student (name, register_date) VALUES (%(name)s, %(register_date)s)
  28. 2019-01-08 18:08:40,514 INFO sqlalchemy.engine.base.Engine {'name': 'Eric', 'register_date': '2019-01-11'}
  29. 2019-01-08 18:08:40,515 INFO sqlalchemy.engine.base.Engine INSERT INTO student (name, register_date) VALUES (%(name)s, %(register_date)s)
  30. 2019-01-08 18:08:40,515 INFO sqlalchemy.engine.base.Engine {'name': 'John', 'register_date': '2019-01-12'}
  31. 2019-01-08 18:08:40,516 INFO sqlalchemy.engine.base.Engine INSERT INTO study_record (day, status, stu_id) VALUES (%(day)s, %(status)s, %(stu_id)s)
  32. 2019-01-08 18:08:40,516 INFO sqlalchemy.engine.base.Engine {'day': 1, 'status': 'Yes', 'stu_id': 1}
  33. 2019-01-08 18:08:40,517 INFO sqlalchemy.engine.base.Engine INSERT INTO study_record (day, status, stu_id) VALUES (%(day)s, %(status)s, %(stu_id)s)
  34. 2019-01-08 18:08:40,517 INFO sqlalchemy.engine.base.Engine {'day': 2, 'status': 'NO', 'stu_id': 1}
  35. 2019-01-08 18:08:40,517 INFO sqlalchemy.engine.base.Engine INSERT INTO study_record (day, status, stu_id) VALUES (%(day)s, %(status)s, %(stu_id)s)
  36. 2019-01-08 18:08:40,517 INFO sqlalchemy.engine.base.Engine {'day': 3, 'status': 'Yes', 'stu_id': 1}
  37. 2019-01-08 18:08:40,518 INFO sqlalchemy.engine.base.Engine INSERT INTO study_record (day, status, stu_id) VALUES (%(day)s, %(status)s, %(stu_id)s)
  38. 2019-01-08 18:08:40,518 INFO sqlalchemy.engine.base.Engine {'day': 1, 'status': 'NO', 'stu_id': 2}
  39. 2019-01-08 18:08:40,518 INFO sqlalchemy.engine.base.Engine INSERT INTO study_record (day, status, stu_id) VALUES (%(day)s, %(status)s, %(stu_id)s)
  40. 2019-01-08 18:08:40,518 INFO sqlalchemy.engine.base.Engine {'day': 1, 'status': 'NO', 'stu_id': 2}
  41. 2019-01-08 18:08:40,519 INFO sqlalchemy.engine.base.Engine COMMIT
  42.  
  43. Process finished with exit code 0
  1. mysql> show tables;
  2. +----------------+
  3. | Tables_in_news |
  4. +----------------+
  5. | address |
  6. | customer |
  7. | student |
  8. | study_record |
  9. | user |
  10. +----------------+
  11. 5 rows in set (0.01 sec)
  12.  
  13. mysql> desc student;
  14. +---------------+-------------+------+-----+---------+----------------+
  15. | Field | Type | Null | Key | Default | Extra |
  16. +---------------+-------------+------+-----+---------+----------------+
  17. | id | int(11) | NO | PRI | NULL | auto_increment |
  18. | name | varchar(32) | NO | | NULL | |
  19. | register_date | date | NO | | NULL | |
  20. +---------------+-------------+------+-----+---------+----------------+
  21. 3 rows in set (0.00 sec)
  22.  
  23. mysql> desc study_record;
  24. +--------+-------------+------+-----+---------+----------------+
  25. | Field | Type | Null | Key | Default | Extra |
  26. +--------+-------------+------+-----+---------+----------------+
  27. | id | int(11) | NO | PRI | NULL | auto_increment |
  28. | day | int(11) | NO | | NULL | |
  29. | status | varchar(32) | NO | | NULL | |
  30. | stu_id | int(11) | YES | MUL | NULL | |
  31. +--------+-------------+------+-----+---------+----------------+
  32. 4 rows in set (0.00 sec)
  33.  
  34. mysql> select * from student;
  35. Empty set (0.00 sec)
  36.  
  37. mysql> select * from stuy_record;
  38. ERROR 1146 (42S02): Table 'news.stuy_record' doesn't exist
  39. mysql>
  40. mysql> select * from study_record;
  41. Empty set (0.00 sec)
  42.  
  43. mysql> show tables;
  44. +----------------+
  45. | Tables_in_news |
  46. +----------------+
  47. | address |
  48. | customer |
  49. | student |
  50. | study_record |
  51. | user |
  52. +----------------+
  53. 5 rows in set (0.00 sec)
  54.  
  55. mysql> show create table student;
  56. +---------+-------------------------------------------------------------+
  57. | Table | Create Table |
  58. +---------+-------------------------------------------------------------+
  59. | student | CREATE TABLE `student` (
  60. `id` int(11) NOT NULL AUTO_INCREMENT,
  61. `name` varchar(32) NOT NULL,
  62. `register_date` date NOT NULL,
  63. PRIMARY KEY (`id`)
  64. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
  65. +---------+-------------------------------------------------------------+
  66. 1 row in set (0.00 sec)
  67.  
  68. mysql> show create table study_record;
  69. +--------------+-------------------------------------------------------------------------+
  70. | Table | Create Table |
  71. +--------------+-------------------------------------------------------------------------+
  72. | study_record | CREATE TABLE `study_record` (
  73. `id` int(11) NOT NULL AUTO_INCREMENT,
  74. `day` int(11) NOT NULL,
  75. `status` varchar(32) NOT NULL,
  76. `stu_id` int(11) DEFAULT NULL,
  77. PRIMARY KEY (`id`),
  78. KEY `stu_id` (`stu_id`),
  79. CONSTRAINT `study_record_ibfk_1` FOREIGN KEY (`stu_id`) REFERENCES `student` (`id`)
  80. ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci |
  81. +--------------+------------------------------------------------------------------------+
  82. 1 row in set (0.00 sec)
  83.  
  84. mysql> select * from study_record;
  85. +----+-----+--------+--------+
  86. | id | day | status | stu_id |
  87. +----+-----+--------+--------+
  88. | 2 | 1 | Yes | 1 |
  89. | 3 | 2 | NO | 1 |
  90. | 4 | 3 | Yes | 1 |
  91. | 5 | 1 | NO | 2 |
  92. | 6 | 1 | NO | 2 |
  93. +----+-----+--------+--------+
  94. 5 rows in set (0.00 sec)
  95.  
  96. mysql> select * from student;
  97. +----+------+---------------+
  98. | id | name | register_date |
  99. +----+------+---------------+
  100. | 1 | Alex | 2019-01-09 |
  101. | 2 | Jack | 2019-01-09 |
  102. | 3 | Rain | 2019-01-10 |
  103. | 4 | Eric | 2019-01-11 |
  104. | 5 | John | 2019-01-12 |
  105. +----+------+---------------+
  106. 5 rows in set (0.00 sec)
  107.  
  108. mysql>

Python3-sqlalchemy-orm 创建关联表带外键并插入数据的更多相关文章

  1. Python3-sqlalchemy-orm 创建关联表带外键并查询数据

    #-*-coding:utf-8-*- #__author__ = "logan.xu" import sqlalchemy from sqlalchemy import crea ...

  2. Python3-sqlalchemy-orm 创建多表关联表带外键

    #-*-coding:utf-8-*- #__author__ = "logan.xu" import sqlalchemy from sqlalchemy import crea ...

  3. 《Entity Framework 6 Recipes》中文翻译系列 (37) ------ 第六章 继承与建模高级应用之独立关联与外键关联

    翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 6-13  在基类中应用条件 问题 你想从一个已存在的模型中的实体派生一个新的实体, ...

  4. 数据库的SQL语句创建和主外键删除操作

    create table UserType ( Id ,), Name nvarchar() not null ) go create table UserInfo ( Id ,), LoginPwd ...

  5. mysql数据库:分表、多表关联、外键约束、级联操作

    一.分表.外键.级联.多对一 二.多对多 三.一对一 一.分表.外键.级联.多对一 将部门数据与员工数据放到同一张表中会造成 数据重复 结构混乱 扩展维护性差 需要分表 create table de ...

  6. 003--PowerDesigner创建索引与外键

    PowerDesigner创建索引与外键 一.创建索引 双击Table->Columns->创建索引 Step1:双击Table Step2:选择Columns->创建索引 弹出如下 ...

  7. SQLSERVER清空(Truncate)被外键引用的数据表

    前言:我们知道SQLSERVER清空数据表有两种方式Delete和Truncate,当然两者的不同大家也都知道(不清楚的可以MSDN).不过这个错误“Cannot truncate table  be ...

  8. 使用Navicat V8.0创建数据库,外键出现错误ERROR 1005: Can’t create table (errno: 121)

    ERROR 1005: Can't create table (errno: 121) errno 121 means a duplicate key error. Probably the tabl ...

  9. Hibernate一对一双向关联(外键)

    网站上各种搜索,都是一些清晰或者不清晰的例子,但是用下来一是确实不给力,二是完全不知道所以然. 后来终于在书中查到了就在这里记一下. 首先要说明,这里只解释双向一对一只有一个表里面有外键的情况. 就以 ...

随机推荐

  1. C++ Socket编程(基础)

    一.基本简介 在计算机通信领域,socket 被翻译为"套接字",它是计算机之间进行通信的一种约定或一种方式. 通过 socket 这种约定,一台计算机可以接收其他计算机的数据,也 ...

  2. odoo学习笔记create函数

    @api.multi def create_order_sale(self): """""" stage_list = [] for ord ...

  3. odoo里面的一些ORM操作

    案例0001sale_obj=self.env['sale.order'].browse(k)通过browse查找对象找到对象里面的 sale_obj.name browse 获取一个数据库id或一个 ...

  4. Qt+腾讯IM开发笔记(一):腾讯IM介绍、使用和Qt集成腾讯IM-SDK的工程模板Demo

    前言   开发一个支持全国的IM聊天,可以有基本的功能,发送文本.图片.文件等等相关内容.   腾讯IM产品 概述   腾讯即时通信IM是腾讯推出的即时聊天程序,当前时间为2020年3月(腾讯IM的优 ...

  5. .NET Conf 2020大会将于2020年11月10日--- 11月12日举行 (UTC)时区

    .NET Conf 2020大会将于2020年11月10日--- 11月12日举行 (UTC)时区 开始时间 2020年11月10日 08:00 (PT) | 16:00 (UTC)| 24:00(北 ...

  6. 软件安装管理(RPM)

    目录 一.linux应用程序 1.1 应用程序与系统命令关系 1.2 典型应用程序的目录结构 1.3 常见的软件包封装工具 二.RPM软件包管理工具 2.1RPM软件包管理器Red-Hat Packa ...

  7. 大厂Android岗高频面试问题:说说你对Zygote的理解!

    前言 Zygote可以说是Android开发面试很高频的一道问题,但总有小伙伴在回答这道问题总不能让面试满意, 在这你就要搞清楚面试问你对Zygote的理解时,面试官最想听到的和其实想问的应该是哪些? ...

  8. 小白学习vue第三天,从入门到精通(computed计算属性)

    computed计算属性 <body> <div id="app"> <div>{{myName}}</div> </div& ...

  9. 带你认识5G技术

    一.移动通讯的发展历程 1.1.移动通讯具有代际演进规律 "G"代表一代 每10年一个周期,如下图所示: 1.2.5G技术指标对比概述 主要的技术指标有:流量密度.连接数密度.时延 ...

  10. 我写一篇文章就是要批评CSDN! 因为蓝湖3.0的更新

    对于开发者,经常会使用,学习到各种环境语言和工具 我们不只是在不断的在搬运知识,更多时候我们也是在 分享我们学到的"新知识", 当我们有幸觉得自己发现了新的知识与技术时,作为分享者 ...