一个简单的orm mysql操作库,运行在python3上。
mysqlorm的Python项目详细描述
mysqlorm
tl:dr
一个简单的orm mysql操作库,运行在python3上。 自动长连接,支持链式调用,生成更安全的语句,构建更优雅的mysql查询。
安装
通过pip安装
(sudo) pip(3) install mysqlorm
用法
首先导入mysqlorm模块:
frommysqlormimportORMModel,MySQLConnect
使用前需要链接数据库:
mysql_connect_config={"host":"host","user":"user","passwd":"passwd","db":"db",}MySQLConnect.connect(mysql_connect_config)
创建一个类以继承ormmodel并设置table_name
属性:
(如果未设置table_name
属性,则默认使用小写类名。)
classExampleModel(ORMModel):table_name="exampletable"
如何使用
插入:
ExampleModel.insert({"field1":"value1","field2","value2"})# single insertExampleModel.insert((# batch insert, can use tuple or list{"field1":"value1","field2","value2"},{"field1":"value1","field2","value2"}))
其中:
支持呼叫链。
where
方法可以传递2个或3个参数。 如果传递了两个参数,则默认情况下比较符号使用等号。 调用链接使用and
连接条件,必须使用orWhere
方法来or
条件ExampleModel.where("field","value").where("field",">","value")ExampleModel.where("field","value").orWhere("field",">","value")
支持批量传入条件,可以使用元组或列表。 使用
and
连接条件ExampleModel.where((("filed1","value1"),("filed2","value2")))
支持聚合条件查询。 或者可以使用lambda方法。
defcondition(query):returnquery.where("field","value").where("field1",">","value")ExampleModel.where(condition).orWhere(lambdaquery:returnquery.where("field","value").where("field1","<","value"))
like
条件使用“locate()”实现, 因为%
符号是python中的一个特殊符号,所以会导致一些问题。 所以不要在where
方法中传递带%
符号的参数。ExampleModel.where("file",'like',"value")
您可以使用
whereIn
和whereNotIn
方法。 可以使用元组或列表。ExampleModel.whereIn("field",TupleOrList).whereNotIn("field",TupleOrList)
您可以使用
whereBetween
和whereNotBetween
。ExampleModel.whereBetween("field","from_condition","to_condition").whereNotBetween("field","from_condition","to_condition")
您可以使用
whereNull
和whereNotNull
。ExampleModel.whereNull("field1").whereNotNull("field2")
查询:
可以使用
select
方法定义查询字段。 如果未传递参数,则默认使用*
。 默认值是查询id
。 或者不能使用select
方法。query=ExampleModel.select("field1","field2","field3")# n field parameters can be passed in.
所有查询都支持
where
方法条件查询。query.where("field","value")
您可以使用
when
方法。 值为true或skip时执行查询。 第二个参数可以是函数,就像使用where
方法一样。importrandoma=random.choice(range(1,10))b=random.choice(range(1,10))query.when(a!=b,condition).when(a==b,lambdaquery:returnquery.where("field","value"))
可以使用
orderBy
方法对result进行排序。orderBy
方法可以传递1或2个参数。 如果传递了一个参数,则默认使用“asc”。query.orderBy("field")
您可以使用
引起的问题。groupBy
方法 但是你必须注意由sql_mode=only_full_group_by
query.groupBy("field")
您可以使用
limit
方法where
方法可以传递1或2个参数。 如果传递了一个参数,则默认情况下offer使用0。query.limit(0,10)
查询返回的都是模型实例。 可以在单个实例上轻松操作。
query.all()# to get all dataquery.find(1)# to find data from idquery.get()# to get data what query according to conditionsquery.first()# to get first raw data what query according to conditions
更新:
# The `update` method supports the `where` conditions.ExampleModel.update({"field1":"value1","field2","value2"})# batch updateExampleModel.where("field","value").update({"field1":"value1"})
删除:
# The `delete` method supports the `where` conditions.ExampleModel.where("field","value").delete()
或模型:
ormmodel实例可以对多种操作进行操作。 您可以通过这种方式获得ormmodel实例:
example=ExampleModel(attributes=attr)# attr must be a dict that matches the database field
可以使用
save
方法插入数据。example.save()
您可以使用
save
方法更新数据或使用delete
方法删除数据。 但实例必须从查询resault。example=ExampleModel.find(1)example.field="new value"example.save()# update dataexample.delete()# delete data
使用
dict
方法将ormmodel实例转换为dictexample.dict()
待办事项
- 完善联接表查询。
- 为ormmodel添加更多函数。
- 增加ormmodel之间的关联。