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数据库。对所有语句使用pyformat
paramstyle。
连接字符串将直接传递给^{
sqlitedatabase
使用SQLiteDatabase
连接到sqlite数据库。对所有语句使用named
paramstyle。你的
连接字符串将直接传递给^{