SQLAlchemy は、Python プログラミング言語によるオープン ソース ソフトウェアです。 SQL ツールキットとオブジェクト リレーショナル マッピング (ORM) ツールを提供する SQLAlchemy は、MIT ライセンスの下でリリースされています。シンプルな Python 言語を使用して完全なエンタープライズ グレードの永続性モデルを実装し、効率的で高パフォーマンスのデータベース アクセスを実現するように設計されています。 SQLAlchemy はデータベースのサイズとパフォーマンスに細心の注意を払っています。
このセクションでは、一連の例を通じて SQLAlchemy の使用法を分析します。
SQLAlchemy を使用するには、テーブルの定義、データベース接続の定義、追加、削除、変更、クエリなどの論理操作の実行というコードの少なくとも 3 つの部分が必要です。
テーブル定義の例:
from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column,Integer,String Base=declarative_base() class Accout(Base): __tablename__=u'accout' id=Column(Integer,primary_key=True) user_namr=Column(String(50),nullable=False) password=Column(String(200),nullable=False) title=Column(String(50)) salary=Column(Integer) def is_active(self): #假设所有 return True def get_id(self): #返回账号ID,用方法返回属性值提高了表的封装性。 return self.id def is_authenticated(self): #假设已经通过验证 return True def is_anonymous(self): #具有登陆名和密码的账号不是匿名用户 return False
定義テーブルを解析するコードは次のとおりです:
SQLAlchemy は次のとおりです。 SQLAlchemy テーブル .ext.declarative_base の前に導入され、そのインスタンス Base を定義します。すべてのテーブルは Base から継承する必要があります。この例では、アカウント テーブル クラス Account が定義されています。
データベース内のテーブルの実際の名前アカウントは、__tablename__ 属性によって定義されます。
テーブル内の列を定義するために使用する必要があるため、sqlalchemy パッケージに Column、Integer、および String 型を導入します。この例では、Account テーブルに 5 つの列、つまり整数の id と給与、および文字列型の user_name、password、および title を定義します。
列を定義するとき、パラメータを Column に渡すことで制約を定義できます。この例では、id 列は、primary_key パラメーターを通じて主キーとして定義され、user__name とpassword は、nullable パラメーターを通じて非 null として定義されます。
データベース接続を定義するサンプル コードは次のとおりです。
from sqlalchemy import create_engine from sqlalchemy.orm import scoped_session,sessionmaker from contextlib import contextmanager db_connect_string='mysql://v_user:v_pase@localhost:3306/test_database?charset=utf8' ssl_args={ 'ssl':{ 'cert':'/home/ssl/client-cert.pem', 'key':'/home/shouse/ssl/client-key.pem', 'ca':'/home/shouse/ssl/ca-cert.pem' } } engine=create_engine(db_connect_string,connect_args=ssl_args) SessionType=scoped_session(sessionmaker(bind=engine,expire_on_commit=False)) def GetSession(): return SessionType() @contextmanager def session_scope(): session=GetSession() try: yield session session.commit() except: session.rollback() raise finally: session.close()この接続のデータ部分を解析するコードは次のとおりです。 :
engine、sqlalchemy.orm.scoped_session、sqlalchemy.orm.sessionmaker。
type]://[user_name]:[password]@[domain]:[port]/[database]?[parameters] です。 ]。この例では、必要な接続情報に加えて、データベース内の文字列をデコードするための UTF-8 エンコード方式を指定する charset パラメータも渡されます。
データベース操作のコード:
from sqlalchemy import or_,orm def InsertAccount(user,passwd,title,salary): #新增操作 with session_scope() as session: account=orm.Account(user_name=user,passwd=passwd,title=title,salary=salary) session.add(account) def GetAccount(id=None,user_name=None): #查询操作 with session_scope() as session: return session.query(orm.Account).filter( or_(orm.Account.id==id,orm.Account.user_name=user_name) ).first() def DeleteAccount(user_name): #删除操作 with session_scope() as session: account=GetAccount(user_name=user_name) if account: session.delete(account) def UpdateAccount(id,user_name,password,title,salary): #更新操作 with session_scope() as session: account=session.query(orm.Account).filter(orm.Account.id==id).first() if not account:return account.user_name=user_name account.password=password account.salary=salary account.title=title InsertAccount("Mark","123","Manager",3000) #调用新增操作 InsertAccount("帅哥","456","Boss",2000) #调用新增操作 GetAccount(2) #调用查询操作 DeleteAccount("Mark") UpdateAccount(1,"admin","none","System admin",2500)この例では、データベースで最も一般的に使用される 4 つのレコードベースの操作 (追加、検索、削除、更新) を示します。コードのこの部分の分析は次のとおりです。
または and__ を使用して接続できます。
主流データベースの接続方法
SQLAlchemy などの Orm データベース操作方法は、ビジネス開発者を異なるデータベース間の違いから守ることができます。データベースの移行が必要な場合 (MySQL から SQLite など)、データベース接続文字列を変更するだけで済みます。 次の表は、SQLAlchemy が主流のデータベースに接続する場合のデータベース文字列の書き込みメソッドを示しています。データベースパッケージ | 连接字符列 |
---|---|
Microsoft SQLServer | 'mssql pymssql://[ユーザー]:[パス]@[ドメイン]:[ポート]/[データベース名]' |
MySQL | 'mysql://[ユーザー] ]:[パス]@[ドメイン]:[ポート]/[データベース名]' |
Oracle | 'oracle://[ユーザー]:[パス]@ [ドメイン]:[ポート/[データベース名]]' |
PostgreSQL | 'postgresql://[ユーザー]:[パス]@[ドメイン]:[ポート]/[dbname]' |
SQLite | 'sqlite://[file_pathname]' |
##
以上がPython での SQLAlchemy の簡単な紹介の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。