orm设置bool型 python_python – 布尔类型列,作为SQLAlchemy中的ClauseElement

为什么SQLAlchemy中不可能将布尔类型列用作ClauseElement本身?

session.query(Table).filter(Table.name == 'huszar', Table.valid)

当然Table.valid == True会起作用,但对我来说看起来有点难看……

解决方法:

我想也许你在0.7上并且ORM在单个filter()调用中还没有支持多个标准,这是在0.8中添加的,如果是独立的话,0.7似乎还需要表绑定列.一切都在0.8:

from sqlalchemy import *

from sqlalchemy.orm import *

from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class A(Base):

__tablename__ = "a"

id = Column(Integer, primary_key=True)

data = Column(String(20))

boolean = Column(Boolean)

# works

e = create_engine("sqlite://", echo=True)

# works

#e = create_engine("postgresql://scott:tiger@localhost/test", echo=True)

# works

#e = create_engine("mysql://scott:tiger@localhost/test", echo=True)

Base.metadata.create_all(e)

s = Session(e)

s.add_all([

A(data='a1', boolean=True),

A(data='a2', boolean=False),

A(data='a3', boolean=True),

])

# works

print s.query(A).filter(A.data > 'a1', A.boolean).all()

# works

print s.query(A).filter(A.boolean).all()

# if before 0.8, need to use and_() or table-bound column

# print s.query(A).filter(and_(A.data > 'a1', A.boolean)).all()

# print s.query(A).filter(A.__table__.c.boolean).all()

标签:python,sqlalchemy

来源: https://codeday.me/bug/20190703/1370324.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在使用 SQLAlchemy 插入文文本时,如果编码不正确,可能会导致乱码等问题。为了防止这种情况发生,可以采用以下措施: 1. 确保数据库的编码与 Python 的编码一致,例如 UTF-8。 2. 在 SQLAlchemy 的 create_engine 函数添加 charset 参数,指定编码方式。 3. 在插入数据时,将文本以 Unicode 格式传入。例如使用 u'文' 的形式。 4. 对于批量插入,可以使用 SQLAlchemy 的 execute 函数和 executemany 函数,这些函数支持传入参数,可以在传入参数时指定编码方式。 以下是一个例子,使用 SQLAlchemy 批量插入文文本: ```python from sqlalchemy import create_engine, Column, Integer, String, Text from sqlalchemy.orm import sessionmaker from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() class Message(Base): __tablename__ = 'message' id = Column(Integer, primary_key=True) content = Column(Text) engine = create_engine('mysql+pymysql://user:password@host:port/dbname?charset=utf8mb4') Session = sessionmaker(bind=engine) session = Session() data = [{'content': u'你好'}, {'content': u'世界'}] session.execute(Message.__table__.insert(), data) session.commit() ``` 在上述例子,我们将数据库的编码设置为 UTF-8,使用了 pymysql 驱动程序,并将编码方式设置为 utf8mb4。同时,我们使用了 Unicode 编码的字符串 u'你好' 和 u'世界'。在批量插入时,我们使用了 execute 函数和 executemany 函数,将参数以表的形式传递给函数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值