sqlalchemy查詢結果類型簡析


Sqlalchemy的查詢方式有很多種,例如可以查詢全部,可以查詢符合條件的,可以查詢指定字段的。那么這么多種查詢,返回的結果是不是一樣的呢?作本文記錄分析結果。

 

Sql_forengin.py

 1 #coding:utf-8
 2 
 3 from sqlalchemy import create_engine
 4 from sqlalchemy.ext.declarative import declarative_base
 5 from sqlalchemy import Column,Integer,String,DATE,ForeignKey  #導入外鍵
 6 from sqlalchemy.orm import  relationship  #創建關系
 7  
 8 engine = create_engine("mysql+mysqldb://root:123@localhost:3306/test",
 9                        encoding="utf-8")
10  
11 Base = declarative_base() #生成orm基類
12  
13 class Student(Base):
14     __tablename__ = "student"
15     id = Column(Integer,primary_key=True)
16     name = Column(String(32),nullable=False)
17     register_day = Column(DATE,nullable=False)
18  
19     #def __repr__(self):
20     #    return "<{0} name:{1}>".format(self.id,self.name)
21  
22  
23 class StudyRecord(Base):
24     __tablename__ = "study_record"
25     id = Column(Integer,primary_key=True)
26     day = Column(Integer,nullable=False)
27     status = Column(String(32),nullable=False)
28     stu_id = Column(Integer,ForeignKey("student.id"))
29     student = relationship("Student",backref="my_study_record") 
30  
31     #def __repr__(self):
32     #    return "<{0} name:{1} stu_id:{2}>".format(self.student.name,self.day,self.stu_id)
33  
34 Base.metadata.create_all(engine) #創建表

 

select.py 

 1 #coding:utf-8
 2 
 3 from sqlalchemy.orm import  sessionmaker
 4 from sqlalchemy import create_engine
 5 from sql_foreign import Student,StudyRecord
 6 
 7 
 8 engine = create_engine("mysql+mysqldb://root:123@localhost:3306/test",)
 9 Session_class = sessionmaker(bind=engine)
10 session = Session_class()
11  
12 stu_obj = session.query(StudyRecord).filter_by(id = 100).first()
13 #stu_obj = session.query(StudyRecord.id,StudyRecord.day).all()
14 #stu_obj = session.query(StudyRecord).all()
15 #print(stu_obj.student.id)  #獲取study_record的數據
16 #print(stu_obj.student.name)  #獲取study_record的數據
17 #print(stu_obj.student.register_day)  #獲取study_record的數據
18 
19 print stu_obj
20 print type(stu_obj)

 

數據庫數據

 

一、查詢出所有

 stu_obj = session.query(StudyRecord).all()

 

 

分析:使用.all()查詢出來的就是一個list列表。在這個列表中存儲的是對象class

 

二、查詢符合條件

 查詢符合條件的第一個

stu_obj = session.query(StudyRecord).filter_by(id = 100).first()

 分析:查詢first返回為一個對象

 

查詢所有符合條件

stu_obj = session.query(StudyRecord).filter_by(day = 90).all()

 

 

分析:查詢出符合添加的所有的值返回為一個list列表,列表中為所有的對象

 

查詢結果沒有指定所有或者第一個

stu_obj = session.query(StudyRecord).filter_by(day = 90)

 

 

分析:查詢出來的是一個對象,不過返回值很特別,是一個查詢語句

 

三、查詢指定的字段

stu_obj = session.query(StudyRecord.id,StudyRecord.day).all()

分析:查詢出來的是一個列表,列表中是對象。雖然很像元祖,但確實是對象。

 

四、查詢的返回結果為唯一一個

stu_obj = session.query(StudyRecord).filter_by(day = 3).one()

分析:返回值為一個對象

 

 

總結:sqlqlchemy查詢的結果一定是對象,根據返回值的不同可能會有一定差異。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM