The instructions are all in the comments, mainly to mark the key points——
-------------------------------------------------- -------------------------------------------------- ----------
Add function, Create: add
#保证环境下要有pymysql模块
import sqlalchemy
import sqlalchemy.ext.declarative#父类结构定义
import sqlalchemy.orm #ORM的所有工具
import sqlalchemy.orm.session#数据库操作的核心
import datetime #ORM组件要使用具体的日期类型
#定义数据库方言(直接在连接上通过字符串的形式定义了)以及链接地址
#当前给定的地址里面还有一个Mysql-connector操作组件,需要单独安装
MYSQL_URL = "mysql+mysqlconnector://root:123456@localhost:3306/xjsql"#mysql的方言+mysql的连接器://账号:密码@地址:端口/数据库
class User(sqlalchemy.ext.declarative.declarative_base()):
__tablename__ = "table1" #数据库里数据表名称
#随后定义字段与属性 与数据库结构匹配的数据类型
gen = sqlalchemy.Column(sqlalchemy.String)
name = sqlalchemy.Column(sqlalchemy.String, primary_key=True)#主键
birthday = sqlalchemy.Column(sqlalchemy.String)
def main():
engine = sqlalchemy.create_engine(MYSQL_URL,encoding='UTF8',echo=True)#引擎,echo为True 返回所有的操作信息
sqlalchemy.orm.session.Session = sqlalchemy.orm.sessionmaker(bind=engine) #创建Session类型
session = sqlalchemy.orm.session.Session() #实例化Session对象
bir_date = datetime.datetime.strptime("2016-11-30","%Y-%m-%d")#字符串转为日期
user = User(name='托马斯2',gen="人妖",birthday=bir_date)
session.add(user)#对象操作 = Sql处理(ORM引擎转换)
session.commit()#事务提交
print("事务提交成功,当前名字为:%s"%user.name)
session.close()
if __name__ == "__main__":
main()
#此时实现了数据库的信息存储,同时发现在编写的过程中没有编写过任何一条具体的SQL语句,而最终的结果会由ORM组件帮助用户自动进行SQL处理。
Speaking of the engine, steal a picture to show the principle:
-------------------------------------- -------------------------------------------------- ----------------------
Search: Research, query(class).get(key)
here, the query can only be done according to the query requirements of the mainkey, and In real-world queries, various filter conditions must be set.
#保证环境下要有pymysql模块
import sqlalchemy
import sqlalchemy.ext.declarative#父类结构定义
import sqlalchemy.orm #ORM的所有工具
import sqlalchemy.orm.session#数据库操作的核心
import datetime #ORM组件要使用具体的日期类型
#定义数据库方言(直接在连接上通过字符串的形式定义了)以及链接地址
#当前给定的地址里面还有一个Mysql-connector操作组件,需要单独安装
MYSQL_URL = "mysql+mysqlconnector://root:123456@localhost:3306/xjsql"#mysql的方言+mysql的连接器://账号:密码@地址:端口/数据库
class User(sqlalchemy.ext.declarative.declarative_base()):
__tablename__ = "table1" #数据表名称
#随后定义字段与属性 与数据库结构匹配的数据类型
gen = sqlalchemy.Column(sqlalchemy.String)
name = sqlalchemy.Column(sqlalchemy.String, primary_key=True)#主键
birthday = sqlalchemy.Column(sqlalchemy.String)
def __repr__(self) -> str: #__repr__返回查询结果
return "用户姓名:%s 性别:%s 生日:%s" %(self.name,self.gen,self.birthday)
def main():
engine = sqlalchemy.create_engine(MYSQL_URL,encoding='UTF8',echo=True)#引擎,echo为True 返回所有的操作信息
sqlalchemy.orm.session.Session = sqlalchemy.orm.sessionmaker(bind=engine) #创建Session类型
session = sqlalchemy.orm.session.Session() #实例化Session对象
user = session.query(User).get("硕牛")#查询ID为1的数据
print(user)
session.close()
if __name__ == "__main__":
main()
#此时实现了数据库的信息存储,同时发现在编写的过程中没有编写过任何一条具体的SQL语句,而最终的结果会由ORM组件帮助用户自动进行SQL处理。
-------------------------------------------------------------------------------------------------------------
Modification: Update. merge
#保证环境下要有pymysql模块
import sqlalchemy
import sqlalchemy.ext.declarative#父类结构定义
import sqlalchemy.orm #ORM的所有工具
import sqlalchemy.orm.session#数据库操作的核心
import datetime #ORM组件要使用具体的日期类型
#定义数据库方言(直接在连接上通过字符串的形式定义了)以及链接地址
#当前给定的地址里面还有一个Mysql-connector操作组件,需要单独安装
MYSQL_URL = "mysql+mysqlconnector://root:123456@localhost:3306/xjsql"#mysql的方言+mysql的连接器://账号:密码@地址:端口/数据库
class User(sqlalchemy.ext.declarative.declarative_base()):
__tablename__ = "table1" #数据表名称
#随后定义字段与属性 与数据库结构匹配的数据类型
gen = sqlalchemy.Column(sqlalchemy.String)
name = sqlalchemy.Column(sqlalchemy.String, primary_key=True)#主键
birthday = sqlalchemy.Column(sqlalchemy.String)
def main():
engine = sqlalchemy.create_engine(MYSQL_URL,encoding='UTF8',echo=True)#引擎,echo为True 返回所有的操作信息
sqlalchemy.orm.session.Session = sqlalchemy.orm.sessionmaker(bind=engine) #创建Session类型
session = sqlalchemy.orm.session.Session() #实例化Session对象
bir_date = datetime.datetime.strptime("2016-11-30","%Y-%m-%d")#字符串转为日期
user = User(name='托马斯2',gen="女",birthday=bir_date)
session.merge(user)#对象操作 = Sql处理(ORM引擎转换),更新哦
session.commit()#事务提交
print("事务提交成功,当前名字为:%s"%user.name)
session.close()
if __name__ == "__main__":
main()
#此时实现了数据库的信息存储,同时发现在编写的过程中没有编写过任何一条具体的SQL语句,而最终的结果会由ORM组件帮助用户自动进行SQL处理。
-------------------------------------------------------------------------------------------------------------
Delete: Delete. Need to check first and then delete, because ORM is based on entities
#保证环境下要有pymysql模块
import sqlalchemy
import sqlalchemy.ext.declarative#父类结构定义
import sqlalchemy.orm #ORM的所有工具
import sqlalchemy.orm.session#数据库操作的核心
import datetime #ORM组件要使用具体的日期类型
#定义数据库方言(直接在连接上通过字符串的形式定义了)以及链接地址
#当前给定的地址里面还有一个Mysql-connector操作组件,需要单独安装
MYSQL_URL = "mysql+mysqlconnector://root:123456@localhost:3306/xjsql"#mysql的方言+mysql的连接器://账号:密码@地址:端口/数据库
class User(sqlalchemy.ext.declarative.declarative_base()):
__tablename__ = "table1" #数据表名称
#随后定义字段与属性 与数据库结构匹配的数据类型
gen = sqlalchemy.Column(sqlalchemy.String)
name = sqlalchemy.Column(sqlalchemy.String, primary_key=True)#主键
birthday = sqlalchemy.Column(sqlalchemy.String)
def main():
engine = sqlalchemy.create_engine(MYSQL_URL,encoding='UTF8',echo=True)#引擎,echo为True 返回所有的操作信息
sqlalchemy.orm.session.Session = sqlalchemy.orm.sessionmaker(bind=engine) #创建Session类型
session = sqlalchemy.orm.session.Session() #实例化Session对象
bir_date = datetime.datetime.strptime("2016-11-30","%Y-%m-%d")#字符串转为日期
user = session.query(User).get("硕狗") #删除实体,ORM是以实体为主
session.delete(user)#对象操作 = Sql处理(ORM引擎转换),更新哦
session.commit()#事务提交
print("事务提交成功,当前名字为:%s"%user.name)
session.close()
if __name__ == "__main__":
main()
#此时实现了数据库的信息存储,同时发现在编写的过程中没有编写过任何一条具体的SQL语句,而最终的结果会由ORM组件帮助用户自动进行SQL处理。
-------------------------------------------------------------------------------------------------------------
Filter query: query and paging query
#保证环境下要有pymysql模块
import sqlalchemy
import sqlalchemy.ext.declarative#父类结构定义
import sqlalchemy.orm #ORM的所有工具
import sqlalchemy.orm.session#数据库操作的核心
import datetime #ORM组件要使用具体的日期类型
#定义数据库方言(直接在连接上通过字符串的形式定义了)以及链接地址
#当前给定的地址里面还有一个Mysql-connector操作组件,需要单独安装
MYSQL_URL = "mysql+mysqlconnector://root:123456@localhost:3306/xjsql"#mysql的方言+mysql的连接器://账号:密码@地址:端口/数据库
class User(sqlalchemy.ext.declarative.declarative_base()):
__tablename__ = "table1" #数据表名称
#随后定义字段与属性 与数据库结构匹配的数据类型
gen = sqlalchemy.Column(sqlalchemy.String)
name = sqlalchemy.Column(sqlalchemy.String, primary_key=True)#主键
birthday = sqlalchemy.Column(sqlalchemy.String)
def __repr__(self) -> str:
return "用户姓名:%s 性别:%s 生日:%s" %(self.name,self.gen,self.birthday)
def main():
engine = sqlalchemy.create_engine(MYSQL_URL,encoding='UTF8',echo=True)#引擎,echo为True 返回所有的操作信息
sqlalchemy.orm.session.Session = sqlalchemy.orm.sessionmaker(bind=engine) #创建Session类型
session = sqlalchemy.orm.session.Session() #实例化Session对象
#session.query(User).get("硕牛")#session.query(User)获得一个查询对象
#user = session.query(User).filter_by(gen="男").all()#过滤条件,all之前只是定义了查询的SQL语句,而真正的查询是在执行了all()方法后才可以;返回的结果是列表,因为可能有多个结果返回
#或
#user = session.query(User).filter(User.gen=="男").all()#可以用于筛选,如User.Salary > 5000.0
#分页操作,设置偏移量与获取数量
#user = session.query(User).filter(User.name.like("%硕%")).offset(0).limit(1).all()#模糊匹配,offset(0).limit(1)为 输出 从偏移量0开始 移动1长度以内的内容,若去除则是输出全部
#user = session.query(User).filter(User.name.like("%硕%")).slice(0, 1).all() # slice原理同上
user = session.query(User).filter(User.name.in_(["硕牛"])).all() #范围选择全匹配查询
print(user)
session.close()
if __name__ == "__main__":
main()
#此时实现了数据库的信息存储,同时发现在编写的过程中没有编写过任何一条具体的SQL语句,而最终的结果会由ORM组件帮助用户自动进行SQL处理。
-------------------------------------------------------------------------------------------------------------
Statistical data volume
user_count = session.query(sqlalchemy.func.count(User.name)).one()