Go to file
2025-06-01 10:57:30 +08:00
docs no history 2024-09-23 14:19:50 +08:00
sqlor bugfix 2025-04-15 17:45:43 +08:00
test no history 2024-09-23 14:19:50 +08:00
.DS_Store no history 2024-09-23 14:19:50 +08:00
build.sh no history 2024-09-23 14:19:50 +08:00
databases.json no history 2024-09-23 14:19:50 +08:00
pyproject.toml bugfix 2025-05-24 13:32:16 +08:00
README.md bugfix 2025-06-01 10:57:30 +08:00

SQLOR

SQLOR is a database api for python3, it is base on the python's DBAPI2

Features

  • Multiple database supported(Oracle, MySql, Postgresql, SQL Server
  • Both asynchronous API & synchronous API supported
  • Connection pools
  • Connection life cycle managements
  • Easy using API
  • Resources(connection object, cursor object) automatic recycled

requirements

  • python 3.5 or above
  • asyncio
  • Oracle DBAPI2 driver(cx_Oracle)
  • MySQL DBAPI2 driver(mysql-connector)
  • Postgresql DBAPI2 driver(psycopg2-binrary)
  • Asynchronous MySQL driver(aiomysql)
  • Asynchronous Postgresql driver(aiopg)
  • Other driver can be easy integreated

Using

import asyncio

from sqlor.dbpools  import DBPools

dbs={
        "aiocfae":{
                "driver":"aiomysql",
                "async_mode":True,
                "coding":"utf8",
                "dbname":"cfae",
                "kwargs":{
                        "user":"test",
                        "db":"cfae",
                        "password":"test123",
                        "host":"localhost"
                }
        },
		"stock":{
			"driver":"aiopg",
			"async_mode":True,
			"codeing":"utf-8",
			"dbname":"stock",
			"kwargs":{
				"dbname":"stock",
				"user":"test",
				"password":"test123",
				"host":"127.0.0.1"
			}
		},
        "cfae":{
                "driver":"mysql.connector",
                "coding":"utf8",
                "dbname":"cfae",
                "kwargs":{
                        "user":"test",
                        "db":"cfae",
                        "password":"test123",
                        "host":"localhost"
                }
        }
}

loop = asyncio.get_event_loop()
pool = DBPools(dbs,loop=loop)

async def testfunc():
        db = DBPools()
		async with db.sqlorContext('stock') as sor:	
			# start a transaction
			# if exception happended, all change to database will rollback
			# else will commit
			sql = "select * from stock where stock_num = ${stock_num}"
			recs = await sor.sqlExe(sql, {'stock_num':'688888'})
			# return a list of DictObject instance
			sql1 = "select * from stock"
			recs = await sor.sqlPaging(sql, {'pagerows':50, 'page':1, 'sort':'stock_id'})
			# return a dictionary {
			#  'total': return all reocords count.
			#  'rows': list of DictObject instance
			# }
			ns = {'id':'666667'} # filters dictionary, find all records which id = '666667'
			recs = await sor.R('stock', ns)
			# recs is a list of data in DictObject instance
			ns = {'pagerows': 50, 'page':1, 'sort':stock_id'}
			# find all record in table 'stock', return page 1 data which 50 max records 
			dic = await sor.R('stock', ns)
			# return a dictionary {
			#  'total': return all reocords count.
			#  'rows': list of DictObject instance
			# }
			await sor.C('stock', {
				'stock_id': '111111',
				...
			})
			# add a record to 'stock' table
			await sor.D('stock', {'stock_id':'111111'})
			# delete a record in 'stock' table which stock_id = '111111'
			await sor.U('stock', {'stock_id':'111111', 'name':'new_name'})
			# update name field's value to 'new_name' which stock_id = '111111'


loop.run_until_complete(testfunc())

API

Databases description data(dbdesc)

sqlor uses a dbdesc data(databases description data) which description how many databases and what database will using, and them connection parameters to create a dbpools objects

dbdesc data is a dict data, format of the dbdesc as follow:

{
        "aiocfae":{			# name to identify a database connect
                "driver":"aiomysql",	# database dbapi2 driver package name 
                "async_mode":True,	# indicte this connection is asynchronous mode
                "coding":"utf8",	# charset coding
                "dbname":"cfae",	# database real name
                "kwargs":{		# connection parameters
                        "user":"test",
                        "db":"cfae",
                        "password":"test123",
                        "host":"localhost"
                }
        },
        "cfae":{
                "driver":"mysql.connector",
                "coding":"utf8",
                "dbname":"cfae",
                "kwargs":{
                        "user":"test",
                        "db":"cfae",
                        "password":"test123",
                        "host":"localhost"
                }
        }
}

sqlor can using multiple databases and difference databases by using difference database driver

sql description data

class

DBPools

SQLor