day 12 pythonエッセイ勉強中


SQLAlchemyはPythonプログラミング言語の下のORMフレームワークで、データベースAPIの上に構築され、リレーショナルオブジェクトマッピングを使用してデータベース操作を行います.簡単に言えば、オブジェクトをSQLに変換し、データAPIを使用してSQLを実行し、実行結果を取得します.
DialectはデータAPIと交流するために用いられ、プロファイルによって異なるデータベースAPIを呼び出し、データベースに対する操作を実現する.MySQL - Python      mysql + mysqldb: / / :@[:] /
  pymysql      mysql + pymysql: / / :@ / [?]
  MySQL - Connector      mysql + mysqlconnector: / / :@[:] /
  cx_Oracle      oracle + cx_oracle: / / user: pass @host:port / dbname[?key = value&key = value...]
  :http: / / docs.sqlalchemy.org / en / latest / dialects / index.html
ステップ1:
Engine/ClonectionPooling/Dialectを使用してデータベース操作を行い、EngineはConnectionPoolingを使用してデータベースに接続し、Dialectを使用してSQL文を実行します.#!/usr/bin/env python # -*- coding:utf-8 -*-
  from   sqlalchemy  import   create_engine
 
  engine  =   create_engine( "mysql+mysqldb://root:[email protected]:3306/s11" , max_overflow = 5 )
  engine.execute(      "INSERT INTO ts_test (a, b) VALUES ('2', 'v1')" )
  engine.execute(       "INSERT INTO ts_test (a, b) VALUES (%s, %s)" ,      (( 555 "v1" ),( 666 "v1" ),) ) engine.execute(      "INSERT INTO ts_test (a, b) VALUES (%(id)s, %(name)s)" ,      id = 999 , name = "v1" )
  result  =   engine.execute( 'select * from ts_test' ) result.fetchall()
#!/usr/bin/env python
# -*- coding:utf-8 -*-

from sqlalchemy import create_engine


engine = create_engine("mysql+mysqldb://root:[email protected]:3306/s11", max_overflow=5)


#     
with engine.begin() as conn:
    conn.execute("insert into table (x, y, z) values (1, 2, 3)")
    conn.execute("my_special_procedure(5)")
    
    
conn = engine.connect()
#      
with conn.begin():
       conn.execute("some statement", {'x':5, 'y':10})

    

注意:データベース接続の表示:show status like'Threads%';
ステップ2:
データベース操作は、Schema Type/SQL Expression Language/Engine/ClonectionPooling/Dialectを使用して行います.Engineは、Schema Typeを使用して特定の構造オブジェクトを作成し、SQL Expression Languageを使用してそのオブジェクトをSQL文に変換し、ConnectionPoolingを使用してデータベースに接続し、Dialectを使用してSQLを実行し、結果を取得します.
#!/usr/bin/env python
# -*- coding:utf-8 -*-
 
from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData, ForeignKey
 
metadata = MetaData()
 
user = Table('user', metadata,
    Column('id', Integer, primary_key=True),
    Column('name', String(20)),
)
 
color = Table('color', metadata,
    Column('id', Integer, primary_key=True),
    Column('name', String(20)),
)
engine = create_engine("mysql+mysqldb://root:[email protected]:3306/s11", max_overflow=5)
 
metadata.create_all(engine)
# metadata.clear()
# metadata.remove()
#!/usr/bin/env python
# -*- coding:utf-8 -*-

from sqlalchemy import create_engine, Table, Column, Integer, String, MetaData, ForeignKey

metadata = MetaData()

user = Table('user', metadata,
    Column('id', Integer, primary_key=True),
    Column('name', String(20)),
)

color = Table('color', metadata,
    Column('id', Integer, primary_key=True),
    Column('name', String(20)),
)
engine = create_engine("mysql+mysqldb://root:[email protected]:3306/s11", max_overflow=5)

conn = engine.connect()

#   SQL  ,INSERT INTO "user" (id, name) VALUES (:id, :name)
conn.execute(user.insert(),{'id':7,'name':'seven'})
conn.close()

# sql = user.insert().values(id=123, name='wu')
# conn.execute(sql)
# conn.close()

# sql = user.delete().where(user.c.id > 1)

# sql = user.update().values(fullname=user.c.name)
# sql = user.update().where(user.c.name == 'jack').values(name='ed')

# sql = select([user, ])
# sql = select([user.c.id, ])
# sql = select([user.c.name, color.c.name]).where(user.c.id==color.c.id)
# sql = select([user.c.name]).order_by(user.c.name)
# sql = select([user]).group_by(user.c.name)

# result = conn.execute(sql)
# print result.fetchall()
# conn.close()

    

詳細は、次のとおりです.
    http://www.jianshu.com/p/e6bba189fcbd
    http://docs.sqlalchemy.org/en/latest/core/expression_api.html
注意:SQLAlchemyはテーブル構造を変更できません.必要に応じてSQLAlchemy開発者がオープンソースの別のソフトウェアAlembicを使用して完了できます.