Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

SQLAlchemy निर्धारित करें कि क्या अद्वितीय बाधा मौजूद है

आप SQLalchemy प्रतिबिंब API का उपयोग कर सकते हैं ।

अद्वितीय बाधाएं प्राप्त करने के लिए, एक get_unique_constraints

प्राथमिक कुंजियाँ अद्वितीय होती हैं, इसलिए आपको एक get_pk_constraint भी।

इसके साथ बनाई गई तालिका:

CREATE TABLE user (
    id INTEGER NOT NULL, 
    name VARCHAR(255), 
    email VARCHAR(255), 
    login VARCHAR(255), 
    PRIMARY KEY (id), 
    UNIQUE (email), 
    UNIQUE (login)
)

उदाहरण:

from sqlalchemy import create_engine
from sqlalchemy.engine.reflection import Inspector

# engine = create_engine(...)

insp = Inspector.from_engine(engine)

print "PK: %r" % insp.get_pk_constraint("user")
print "UNIQUE: %r" % insp.get_unique_constraints("user")

आउटपुट:

PK: {'name': None, 'constrained_columns': [u'login']}
UNIQUE: [{'column_names': [u'email'], 'name': None}, {'column_names': [u'login'], 'name': None}]

आप अद्वितीय बाधाओं को सत्यापित कर सकते हैं:

pk = insp.get_pk_constraint("user")['constrained_columns']
unique = map(lambda x: x['column_names'], insp.get_unique_constraints("user"))

for column in ['name', 'id', 'email', 'login']:
    print "Column %r has an unique constraint: %s" %(column, [column] in [pk]+unique)

आउटपुट:

Column 'name' has an unique constraint: False
Column 'id' has an unique constraint: True
Column 'email' has an unique constraint: True
Column 'login' has an unique constraint: True

अपडेट 01

उपरोक्त कोड केवल पहले से बनाई गई तालिका के स्तंभों के लिए बाधा की जाँच करता है, यदि आप निर्माण से पहले स्तंभों का निरीक्षण करना चाहते हैं तो यह अधिक सरल है:

from sqlalchemy import create_engine, Column, types
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker, scoped_session

Base = declarative_base()

class User(Base):
    __tablename__ = "user"
    id = Column(types.Integer, primary_key=True)
    name = Column(types.String(255))
    email = Column(types.String(255), unique=True)
    login = Column(types.String(255), unique=True)

# do not create any table
#engine = create_engine('sqlite:///:memory:', echo=True)
#session = scoped_session(sessionmaker(bind=engine))
#Base.metadata.create_all(engine)

# check if column is (any) a primary_key or has unique constraint
# Note1: You can use User.__table__.c too, it is a alias to columns
# Note2: If you don't want to use __table__, you could use the reflection API like:
#        >>> from sqlalchemy.inspection import inspect
#        >>> columns = inspect(User).columns
result = dict([(c.name, any([c.primary_key, c.unique])) for c in User.__table__.columns])

print(result)

आउटपुट:

{'email': True, 'login': True, 'id': True, 'name': False}

यदि आप केवल कुछ कॉलम देखना चाहते हैं, तो आप केवल यह कर सकते हैं:

for column_name in ['name', 'id', 'email', 'login']:
    c = User.__table__.columns.get(column_name)
    print("Column %r has an unique constraint: %s" %(column_name, any([c.primary_key, c.unique])))

आउटपुट:

Column 'name' has an unique constraint: False
Column 'id' has an unique constraint: True
Column 'email' has an unique constraint: True
Column 'login' has an unique constraint: True



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. स्तंभों की चर संख्या के साथ SQL डेटाबेस

  2. सिद्धांत और पसंद क्वेरी

  3. कोडनिर्देशक:जब वे उपयोगकर्ता नाम बनाते हैं तो मैं अपने उपयोगकर्ताओं के लिए उपयोगकर्ता यूआरएल बनाना चाहता हूं

  4. JSON और सर्वर पर छवि अपलोड करें

  5. क्या PostgreSQL के बराबर एक MySQL है array_to_string