ROM SQL Alchemy使用代码教程

ROMSQLAlchemy使用代码教程

# -- coding: utf-8 --
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Table, Column, Integer, String, DateTime, Boolean


# 获取链接 Connecting
# engine = create_engine('mysql://root:admin123@localhost:3306/news_test')
# 插入中文出现错误解决
engine = create_engine('mysql://root:admin123@localhost:3306/news_test?charset=utf8')

# Declare a Mapping 
# 获取基类
Base = declarative_base()

# 获取session对象
Session = sessionmaker(bind = engine)

#模型声明 
class News(Base):   # Base 是 ORM的一个基类 ,也就是说News类继承自Base
    """ 新闻类 """
    __tablename__ = 'news'
    id = Column(Integer, primary_key = True)    # 若数据为news_id id = Column(Interger, primaty_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)
"""
使用命令行创建表
lijuncheng@lijunchengdeMacBook-Pro ~/Code/MySQL数据库 代码/实战网易新闻 $ python
Python 2.7.13 |Anaconda custom (x86_64)| (default, Sep 21 2017, 17:38:20)
[GCC 4.2.1 Compatible Clang 4.0.1 (tags/RELEASE_401/final)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> from test_mysql_orm import News
>>> from test_mysql_orm import engine
>>> News.metadata.create_all(engine)      # 创建news表
/Users/lijuncheng/anaconda2/lib/python2.7/site-packages/sqlalchemy/dialects/mysql/base.py:1569: Warning: (1287L, "'@@tx_isolation' is deprecated and will be removed in a future release. Please use '@@transaction_isolation' instead")
  cursor.execute('SELECT @@tx_isolation')
>>>

"""
class MySQLOrmTest(object):

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

    def add_one(self):
        """ 新增一条记录 """
        new_obj = News(
            title = '标题',
            content = '内容',
            types = '百家',
        )

        new_obj2 = News(
            title = 'title ',
            content = 'content ',
            types = '1',
        )

        self.session.add(new_obj)
        self.session.add(new_obj2)
        self.session.commit()
        return new_obj

    def get_one(self):
        """  获取一条数据 """
        return self.session.query(News).get(13) # 查询id为1的数据

    def get_more(self):
        """  获取多条数据  """
        return self.session.query(News).filter_by(is_valid = True) # 查询没有删除的 即 is_valid =1

    def update_data(self, pk):
        """ 修改单条数据 """
        new_obj = self.session.query(News).get(pk)
        if new_obj:
            new_obj.is_valid = 0
            self.session.add(new_obj)
            self.session.commit()
            return True
        return False  # 如果有数据就修改数据返回True,没有数据就直接返回False

    def update_data_more(self):
        """ 修改多条数据 """
        #data_list = self.session.query(News).filter_by(is_valid = False)
        data_list = self.session.query(News).filter(News.id >= 5)
        for item in data_list:
            item.is_valid = 1
            self.session.add(item)
        self.session.commit()
        pass

    def delete_data(self, pk):
        """ 删除单条数据  """
        # 获取删除的数据
        new_obj = self.session.query(News).get(pk)
        self.session.delete(new_obj)
        self.session.commit()

    def delete_data_more(self):
        """ 删除多条数据  """
        data_list = self.session.query(News).filter(News.id >= 5)
        for item in data_list:
            self.session.delete(item)
        self.session.commit()
        pass






def main():
    obj = MySQLOrmTest()

    # 测试插入一条数据
    # rest = obj.add_one()
    # print rest.id

    # 测试获取一条数据
    # rest = obj.get_one()
    # if rest:
    #     print 'ID:{0} => {1}'.format(rest.id, rest.title) # 采用format的方式格式化
    # else:
    #     print "No exist."

    # 测试获取多条数据
    # rest = obj.get_more()
    # print rest.count() # 答应查询的数据条数

    # for new_obj in rest:
    #      print 'ID:{0} => {1}'.format(new_obj.id, new_obj.title)
    # pass

    # 测试修改数据代码
    # print obj.update_data(10)

    # # 测试多条数据修改代码
    # obj.update_data_more()

    # 测试删除数据代码
    # obj.delete_data(1)

    # 测试删除多条数据代码
    obj.delete_data_more()



if __name__ == '__main__':
    main()
"""
将每一条记录看成一个对象,ORM就是把数据库的记录转换为对象。
ORM的实现:
    1.SqlObject
    2.peewee
    3.Django‘s ORM Django框架
    4.SQLAlchemy


"""
(0)
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐