python数据库微包

fort的Python项目详细描述


堡垒

python数据库微包


fort是一个很薄的数据库包装器,适合喜欢编写sql的程序员使用。当sqlalchemy太多时使用它。

用法

首先为数据库初始化一个对象,提供一个连接字符串:

importfortdb=fort.PostgresDatabase('postgres://user:password@host/database')

Fort的每个数据库类都提供了一组使使用SQL变得简单的方法。你可以马上 开始查询数据库:

importuuiddb.u('CREATE TABLE widgets (id uuid PRIMARY KEY, name text)')my_id=uuid.uuid4()db.u('INSERT INTO widgets (id, name) VALUES (%(id)s, %(name)s)',{'id':my_id,'name':'Thingy'})forrowindb.q('SELECT id, name FROM widgets'):print(row['id'],row['name'])my_widget=db.q_one('SELECT id, name FROM widgets WHERE id = %(id)s',{'id':my_id})print(my_widget['name'])my_widget_name=db.q_val('SELECT name FROM widgets WHERE id = %(id)s',{'id':my_id})print(my_id,my_widget_name)

直接使用Fort的一个数据库类是可以的,但是最好通过 子类化Fort的一个类并添加自己的方法:

classMyDatabase(fort.PostgresDatabase):defmigrate(self):self.u('CREATE TABLE widgets (id uuid PRIMARY KEY, name text)')defadd_widget(self,widget_name:str)->uuid.UUID:new_id=uuid.uuid4()sql='INSERT INTO widgets (id, name) VALUES (%(id)s, %(name)s)'params={'id':new_id,'name':widget_name}self.u(sql,params)returnnew_iddeflist_widgets(self)->List[Dict]:returnself.q('SELECT id, name FROM widgets')defget_widget(self,widget_id:uuid.UUID)->Optional[Dict]:sql='SELECT id, name FROM widgets WHERE id = %(id)s'returnself.q_one(sql,{'id':widget_id})defget_widget_name(self,widget_id:uuid.UUID)->Optional[str]:sql='SELECT name FROM widgets WHERE id = %(id)s'returnself.q_val(sql,{'id':widget_id})db=MyDatabase('postgres://user:password@host/database')db.migrate()my_id=db.add_widget('Thingy')forwidgetindb.list_widgets():print(widget['id',widget['name']])my_widget=db.get_widget(my_id)print(my_widget['id'],my_widget['name'])my_widget_name=db.get_widget_name(my_id)print(my_id,my_widget_name)

数据库类方法

每个fort数据库类都有以下方法:

defu(self,sql:str,params:Dict=None)->int:..."""    Execute a statement and return the number of rows affected.    Use this method for CREATE, INSERT, and UPDATE statements.    """defq(self,sql:str,params:Dict=None)->List[Dict]:..."""    Execute a statement and return all results.    Use this method for SELECT statements.    """defq_one(self,sql:str,params:Dict=None)->Optional[Dict]:..."""    Execute a statement and return the first result.    If there are no results, return `None`.    """defq_val(self,sql:str,params:Dict=None)->Any:..."""    Execute a statement and return the value in the first column of the first result.    If there are no results, return `None`.    """

有关特定数据库类的说明

格雷斯数据库

使用PostgresDatabase连接到PostgreSQL数据库。对所有语句使用pyformatparamstyle。 连接字符串将直接传递给^{}

sqlitedatabase

使用SQLiteDatabase连接到sqlite数据库。对所有语句使用namedparamstyle。你的 连接字符串将直接传递给^{}

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

推荐PyPI第三方库


热门话题
使用Selenium Webdriver的java IE浏览器:“驱动程序可执行文件是一个目录”   初学者Java多线程问题   java使用lambdas从映射返回前n个元素   如何使用JavaSpringBoot检测方法post中保存的重复值   java MarginLeft不起作用:为什么?   java Excel文件在写入后已损坏   类中从方法到字符串的java字符串   java JavaFX线条图颜色差异   java将整型数组列表展平   java内容显示在带有自定义单元格工厂的空行中   java顺时针旋转链表   java将负JOOQ YearToSecond对象转换为毫秒的正确方法   java Android:如何实现可打包到我的对象?   java如何使用retrofi获取基于id的详细信息