Basic CRUD through sqlalchemy

#!/usr/bin/env python
# -*- coding: utf-8 -*-

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

# Initialize database connection:
engine = create_engine('mysql+pymysql://root:123123@localhost/school?charset=utf8',encoding='utf-8') # school is the database name, which already exists
# Create base class for objects:
Base = declarative_base()

''' mysql native statement
CREATE TABLE `news`(
	`id` INT 	NOT NULL AUTO_INCREMENT,
	`title` VARCHAR(200) NOT NULL,
	`content` VARCHAR(2000) NOT NULL,
	`types` VARCHAR(10) NOT NULL,
	`image` VARCHAR(300) NULL,
	`author` VARCHAR(20) NULL,
	`view_count` INT DEFAULT 0,
	`create_at` DATETIME NULL,
	`is_valid` SMALLINT DEFAULT 1,
	PRIMARY KEY(`id`)
)DEFAULT CHARSET 'UTF8';
'''

class News(Base):
    # table name:
    __tablename__ = 'news_alchemy' # Need to create a new table name

    # Structure of the table:
    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,)
    create_at = Column(DateTime,)
    is_valid = Column(Boolean,)


# create table
#News.metadata.create_all(engine)

# adding data
Session_class = sessionmaker(bind=engine) # Create a session session class with the database, note that what is returned to the session here is a class, not an instance

class OrmAdd(object):
    def __init__(self):
        self.session = Session_class() # Generate a session instance

    def add(self):
        """Insert data"""
        obj1 = News(
            title = 'D1',
            content = 'I am D1',
            types = 'chain home',
            is_valid = 0,
        )
        obj2 = News(
            title = 'D2',
            content = 'I am D2',
            types = 'chain home',
            is_valid=0,
        )
        obj3 = News(
            title = 'D2',
            content = 'I am D2',
            types = 'chain home',
            is_valid=1,
        )
        self.session.add(obj1)
        self.session.add(obj2)
        self.session.add(obj3)
        self.session.commit()
        return obj1

    def get_one(self):
        """Query a piece of data"""
        return self.session.query(News).get(13)

    def get_more(self):
        """Query multiple pieces of data"""
        return self.session.query(News).filter_by(is_valid=0)

    def update_one(self,nid):
        """Modify a piece of data"""
        ud_obj = self.session.query(News).get(nid)
        if ud_obj:
            ud_obj.author = 'Zhao Yun'
            self.session.add (ud_obj)
            self.session.commit()
            return True
        return False

    def update_more(self,qk):
        """Modify multiple pieces of data"""
        data_list = self.session.query(News).filter_by(is_valid=qk)
        for ud_obj in data_list:
            ud_obj.author = 'Little Joe'
            self.session.add (ud_obj)
        self.session.commit()

    def del_one(self):
        """Delete a piece of data"""
        del_obj = self.session.query(News).filter_by(id=15).first()
        if del_obj:
            self.session.delete(del_obj)
            self.session.commit()
            return True
        return False

def main():
    orm = OrmAdd ()
    #obj = orm.add()

    # Query data
    #obj = orm.get_one()
    obj = orm.get_more()
    if obj: # process the query data
        # get a
        # print(obj.types)
        # get multiple
        for ele in obj:
            print(ele.types)
    else:
        print("The query object does not exist")

    # change data
    # orm.update_one(110)
    # orm.update_more(False)

    # delete data
    orm.del_one()

if __name__ == '__main__':
    main()


Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=325570512&siteId=291194637