一个简单的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")

    您可以使用whereInwhereNotIn方法。 可以使用元组或列表。

    ExampleModel.whereIn("field",TupleOrList).whereNotIn("field",TupleOrList)

    您可以使用whereBetweenwhereNotBetween

    ExampleModel.whereBetween("field","from_condition","to_condition").whereNotBetween("field","from_condition","to_condition")

    您可以使用whereNullwhereNotNull

    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实例转换为dict

    example.dict()

待办事项

  • 完善联接表查询。
  • 为ormmodel添加更多函数。
  • 增加ormmodel之间的关联。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java游戏!框架伪造应用程序它实际上做什么?   java如何在JavaFx中显示表视图中的即时更改?   对象类的equals()方法的java重载   xpages介绍如何部署java。IBM Notes中的策略更改   java如何访问侦听器中的另一个视图?   java getDefaultDisplay()的替代方法是什么   java opencv匹配模板   java Android Firebase写入数据时的常量超时   在Java中,如何将包含大量空格的数字字符串转换为一系列Int变量。   带有GUI的swing Java模拟无法运行模拟   java NoSuchElementException在特定的Web端上使用无头铬和硒   java对文件进行迭代,即使文件在目录中也会出现“未找到文件”异常。你能告诉我为什么吗?谢谢   递归Java 8,匿名递归嵌套方法   java为什么我看到枚举常量的字段值会被序列化/反序列化?在哪种情况下,枚举中哪些内容没有序列化?   java在运行sonar scanner和Spotbugs规则时出错,用于单片项目?   java如何检查硬件键盘是否可用?(黑莓)   tile游戏动作侦听器循环中的java错误   sockets Java线程池与高请求场景中的新线程   java如何使用Hibernate注释在联接表上创建索引?