批量插入关联数据问题

来源:4-7 通过ORM修改和删除数据

Dod_Annie

2019-01-11

现在我需要批量插入一张表的数据,(比如User表),现在需求是每创建一个user之前,就要在另一张表(比如Record表)创建一条数据,并且将record.id作为user的必填字段,才能创建user,现在要用sqlalchemy.orm批量插入user(一次sesson.commit),请问该如何处理?

写回答

1回答

NavCat

2019-01-14

首先你要在ORM模型中定义主外键关系

给你一个例子你参考下:

#!/usr/bin/python
#coding=utf-8

from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
from sqlalchemy import Column, Integer, String, DateTime, \
    Boolean, ForeignKey
from sqlalchemy.orm import relationship, backref

engine = create_engine("mysql://root:@127.0.0.1:3306/news?charset=utf8")

Session = sessionmaker(bind=engine)

Base = declarative_base()

class User(Base):
    __tablename__ = 'user'

    id = Column(Integer, primary_key=True)
    name = Column(String(20))
    # 一对多
    news = relationship('News', backref='news',
                                lazy='dynamic')


class News(Base):
    ''' 新闻类型 '''
    __tablename__ = 'news'
    id = Column(Integer, primary_key=True)
    title = Column(String(200), nullable=False)
    content = Column(String(2000), nullable=False)
    types = Column(String(10), nullable=False)
    image = Column(String(300))
    author = Column(String(20))
    view_count = Column(Integer)
    created_at = Column(DateTime)
    is_valid = Column(Boolean)

    user_id = Column(Integer, ForeignKey('user.id'))


class MysqlOrmTest(object):

    def __init__(self):
        self.session = Session()

    def add_one(self):
        ''' 添加数据 '''
        user = User(name='张三2')
        new_obj = News(
            title='ORM标题',
            content='content',
            types="百家"
        )
        user.news.append(new_obj)
        self.session.add(new_obj)
        self.session.commit()
        return new_obj


你也可以参考这个文档:

https://docs.sqlalchemy.org/en/latest/orm/basic_relationships.html#association-object

0
1
Dod_Annie
非常感谢!
2019-01-14
共1条回复

Python操作三大主流数据库-MySQL+MongoDB+Redis

一次实战同时掌握Python操作MySQL,MongoDB,Redis 三大数据库使用技巧

2024 学习 · 376 问题

查看课程