sqlalchemy - reflecting tables and columns with spaces

前端 未结 1 604
轻奢々
轻奢々 2020-12-04 02:06

How can I use sqlalchemy on a database where the column names (and table names) have spaces in them?

db.auth_stuff.filter(\"db.auth_stuff.first name\"==\'Joe\'

相关标签:
1条回答
  • 2020-12-04 02:53

    you can do this using a reflection event to give the columns a .key, however the full recipe has a bug when primary key columns are involved, which was fixed in the still-unreleased 0.8.3 version (as well as master). If you check out 0.8.3 at https://bitbucket.org/zzzeek/sqlalchemy/get/rel_0_8.zip this recipe will work even with primary key cols:

    from sqlalchemy import *
    from sqlalchemy.orm import *
    from sqlalchemy.ext.declarative import declarative_base, DeferredReflection
    
    Base = declarative_base(cls=DeferredReflection)
    
    
    e = create_engine("sqlite://", echo=True)
    e.execute("""
        create table "user table" (
                "id col" integer primary key,
                "data col" varchar(30)
        )
    """)
    
    from sqlalchemy import event
    
    @event.listens_for(Table, "column_reflect")
    def reflect_col(inspector, table, column_info):
        column_info['key'] = column_info['name'].replace(' ', '_')
    
    class User(Base):
        __tablename__ = "user table"
    
    Base.prepare(e)
    
    s = Session(e)
    print s.query(User).filter(User.data_col == "some data")
    

    DeferredReflection is an optional helper to use with declarative + reflection.

    0 讨论(0)
提交回复
热议问题