sqlalchemy
系统的学一下sqlalchemyA,不过没有中文文档,只能用我的渣英文能力慢慢看原文档了
数据库连接
>>> from sqlalchemy import create_engine >>> engine = create_engine('sqlite:///:memory:', echo=True)
echo为True输出日志
各种数据库连接方式
dialect+driver://username:password@host:port/database
Postgresql
# default engine = create_engine('postgresql://scott:tiger@localhost/mydatabase') # psycopg2 engine = create_engine('postgresql+psycopg2://scott:tiger@localhost/mydatabase') # pg8000 engine = create_engine('postgresql+pg8000://scott:tiger@localhost/mydatabase')
MySQL
# default engine = create_engine('mysql://scott:tiger@localhost/foo') # mysql-python engine = create_engine('mysql+mysqldb://scott:tiger@localhost/foo') # MySQL-connector-python engine = create_engine('mysql+mysqlconnector://scott:tiger@localhost/foo') # OurSQL engine = create_engine('mysql+oursql://scott:tiger@localhost/foo')
Oracle
engine = create_engine('oracle://scott:[email protected]:1521/sidname') engine = create_engine('oracle+cx_oracle://scott:tiger@tnsname')
SQLite
# sqlite://<nohostname>/<path> # where <path> is relative: engine = create_engine('sqlite:///foo.db') #Unix/Mac - 4 initial slashes in total engine = create_engine('sqlite:////absolute/path/to/foo.db') #Windows engine = create_engine('sqlite:///C:\\path\\to\\foo.db') #Windows alternative using raw string engine = create_engine(r'sqlite:///C:\path\to\foo.db') # To use a SQLite :memory: database, specify an empty URL: engine = create_engine('sqlite://')
声明样式
from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, String Base = declarative_base() class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) name = Column(String) fullname = Column(String) password = Column(String) def __repr__(self): return "<User(name='%s', fullname='%s', password='%s')>" % ( self.name, self.fullname, self.password)
样式参数说明
说明 | |
**\_tablename\_\_** | 表名 |
字段类型及说明
Generic Types
字段类型 说明 BigInteger 大数 Boolean(createconstraint=True, name=None, \_createevents=True) 布尔 Data DateTime(timezone=False) 时间 Enum(\*enums, \*\*kw) 枚举 Float(precision=None, asdecimal=False, decimalreturnscale=None, \*\*kwargs) 浮点型 Integer 整型 Interval(native=True, secondprecision=None, dayprecision=None) 时间间隔 LargeBinary(length=None) 二进制大对象 MatchType(createconstraint=True, name=None, \_createevents=True) Numeric(precision=None, scale=None, decimalreturnscale=None, asdecimal=True) PickleType(protocol=2, pickler=None, comparator=None) SchemaType(name=None, schema=None, metadata=None, inheritschema=False, quote=None, \_createevents=True) SmallInteger 小整型 String(length=None, collation=None, convertunicode=False, unicodeerror=None, \_warnonbytestring=False) 字符串 Text(length=None, collation=None, convertunicode=False, unicodeerror=None, \_warnonbytestring=False) 文本对象 Time(timezone=False) 时间 Unicode(length=None, \*\*kwargs) UnicodeText(length=None, \*\*kwargs) SQL Standard Types
字段类型 说明 BIGINT BINARY(length=None) BLOB(length=None) BOOLEAN(createconstraint=True, name=None, \_createevents=True) CHAR(length=None, collation=None, convertunicode=False, unicodeerror=None, \_warnonbytestring=False) CLOB(length=None, collation=None, convertunicode=False, unicodeerror=None, \_warnonbytestring=False) DATE DATETIME(timezone=False) DECIMAL(precision=None, scale=None, decimalreturnscale=None, asdecimal=True) FLOAT(precision=None, asdecimal=False, decimalreturnscale=None, \*\*kwargs) INT INTEGER NCHAR(length=None, \*\*kwargs) NVARCHAR(length=None, \*\*kwargs) NUMERIC(precision=None, scale=None, decimalreturnscale=None, asdecimal=True)¶ REAL(precision=None, asdecimal=False, decimalreturnscale=None, \*\*kwargs) SMALLINT TEXT(length=None, collation=None, convertunicode=False, unicodeerror=None, \_warnonbytestring=False TIME(timezone=False) TIMESTAMP(timezone=False) VARBINARY(length=None) VARCHAR(length=None, collation=None, convertunicode=False, unicodeerror=None, \_warnonbytestring=False)
创建表
Base.metadata.create_all(engine)
为表创建实例
>>> ed_user = User(name='ed', fullname='Ed Jones', password='edspassword') >>> ed_user.name 'ed' >>> ed_user.password 'edspassword' >>> str(ed_user.id) 'None'
创建session
>>> from sqlalchemy.orm import sessionmaker >>> Session = sessionmaker(bind=engine)
你也可以先创建Session,在创建应用前
>>> Session = sessionmaker()
当你创建了应用,可以这样配置
>>> Session.configure(bind=engine) # once engine is available
插入和更新数据
插入
插入一条数据
>>> ed_user = User(name='ed', fullname='Ed Jones', password='edspassword') >>> session.add(ed_user)
插入多条数据
>>> session.add_all([ ... User(name='wendy', fullname='Wendy Williams', password='foobar'), ... User(name='mary', fullname='Mary Contrary', password='xxg527'), ... User(name='fred', fullname='Fred Flinstone', password='blah')])
更新
>>> ed_user.password = 'f8s7ccs'
查看
>>> session.dirty IdentitySet([<User(name='ed', fullname='Ed Jones', password='f8s7ccs')>]) >>> session.new # doctest: +SKIP IdentitySet([<User(name='wendy', fullname='Wendy Williams', password='foobar')>, <User(name='mary', fullname='Mary Contrary', password='xxg527')>, <User(name='fred', fullname='Fred Flinstone', password='blah')>])
必须提交才能生效
>>> session.commit()