# 连接数据库
mssql+zxjdbc://user:pass@host:port/dbname[?key=value&key=value...]
mssql+adodbapi://<username>:<password>@<dsnname>
# engine = create_engine('mssql+pymssql://scott:tiger@hostname:port/dbname',**kwargs)
echo=True, # 输出sql语句
deprecate_large_types=True
#当该标志是True,在UnicodeText,Text和LargeBinary数据类型,用于渲DD时,将呈现类型NVARCHAR(max),VARCHAR(max)以及VARBINARY(max),分别。这是添加此标志后的新行为。
#当该标志是False,在UnicodeText,Text和LargeBinary数据类型,用于渲染DDL时,将呈现类型NTEXT,TEXT以及IMAGE,分别。这是这些类型的长期行为。
isolation_level="REPEATABLE READ"
AUTOCOMMIT- 特定于pyodbc / pymssqlREAD COMMITTEDREAD UNCOMMITTEDREPEATABLE READSERIALIZABLESNAPSHOT- 特定于SQL Server
echo True 打印日志 默认False 不输出日志
mssql_clustered True 支持聚簇索引(和主键)
MOdel 类
from sqlalchemy.dialects.mssql import \ BIGINT, BINARY, BIT, CHAR, DATE, DATETIME, DATETIME2, \ DATETIMEOFFSET, DECIMAL, FLOAT, IMAGE, INTEGER, MONEY, \ NCHAR, NTEXT, NUMERIC, NVARCHAR, REAL, SMALLDATETIME, \ SMALLINT, SMALLMONEY, SQL_VARIANT, TEXT, TIME, \ TIMESTAMP, TINYINT, UNIQUEIDENTIFIER, VARBINARY, VARCHAR
BIGINT 长整数__init__¶()
CHAR 定长字段__init__(length = None,collation = None,convert_unicode = False,unicode_error = None,_warn_on_bytestring = False )
DATETIME2 __init__(precision = None,** kw )¶
DATETIMEOFFSET __init__(precision = None,** kwargs )¶
IMAGE __init__(length=None)
Money __init__()
Nchar __init__(length=None,**kwargs)
ntext
nvarchar
real
from sqlalchemy import create_engine, Column, Integer, Stringfrom sqlalchemy.orm import sessionmakerfrom sqlalchemy.ext.declarative import declarative_baseengine = create_engine("mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8".format(user,password,host,port,db_name),echo=False)DB_Session = sessionmaker(bind=engine)Base = declarative_base()class SeedOrm(Base): __tablename__ = 'crawl_seed_url' id = Column(Integer, primary_key=True,autoincrement=True) keyword= Column(String(32)) province=Column(String(32)) url = Column(String(128))
Integer int 常规整形,通常为32位SmallInteger int 短整形,通常为16位BigInteger int或long 精度不受限整形Float float 浮点数Numeric decimal.Decimal 定点数String str 可变长度字符串Text str 可变长度字符串,适合大量文本Unicode unicode 可变长度Unicode字符串Boolean bool 布尔型Date datetime.date 日期类型Time datetime.time 时间类型Interval datetime.timedelta 时间间隔Enum str 字符列表PickleType 任意Python对象 自动Pickle序列化LargeBinary str 二进制常见的SQLALCHEMY列选项可选参数 描述primary_key 如果设置为True,则为该列表的主键unique 如果设置为True,该列不允许相同值index 如果设置为True,为该列创建索引,查询效率会更高nullable 如果设置为True,该列允许为空。如果设置为False,该列不允许空值default 定义该列的默认值
# sql 过滤
session.query(User).filter(User.id>10).all()
session.query(User).filter("id>:id").params(id=1).all()
# 分页 用于query对象限制 副词
session.query(User).limit(1).all()
// 使用偏移时必须使用order_by配合使用 否则报错
session.query(User).order_by(User.id).limit(10).offset(10).all()
# 对查询到的数据排序
from sqlalchemy import desc
session.query(User).filter(User.id>=2).order_by(User.id) # 默认升序
session.query(User).filter(User.id>=2).order_by(desc(User.id) ) # 降序排列
# 关联查询
session.query(User, Address).filter(User.id == Address.user_id).all()
session.query(User).join(User.addresses).all()
# 疑问
session.query(User).outerjoin(User.addresses).all()
# 聚合查询
session.query(User.id, func.count('*').label('user_count').group_by(User.name).all() # 返回元祖列表
session.query(User.name,func.sum(User.id).label("user_id_sum")).group_by(User.name).all()
# 子查询
stmt =session.query(Address.user_id,func.count('*').label('address_count')).group_by(Address.user_id).subquery()
session.query(User, stmt.c.address_count).outerjoin((stmt, User.id==stmt.c.user_id)).order_by(User.id).all()
# exists
session.query(User).filter(exists().where(User.id == 2)).first() # 存在 不存在返回None
session.query(User).filter(~exists().where(User.id == 2)).first() # 不存在
# 记录总数查询
session.query(func.count(User.id))
session.query(func.count(User.id)).\ group_by(User.name)
浙公网安备 33010602011771号