Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

SQLAlchemy Menentukan Jika Ada Kendala Unik

Anda dapat menggunakan API refleksi SQLalchemy .

Untuk mendapatkan batasan unik, keluarkan get_unique_constraints .

Kunci utama bersifat unik, jadi Anda harus mengeluarkan get_pk_constraint juga.

tabel dibuat dengan:

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

contoh:

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")

keluaran:

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

Anda dapat memverifikasi batasan unik dengan:

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)

keluaran:

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

Perbarui 01

Kode di atas hanya memeriksa batasan untuk kolom dari tabel yang sudah dibuat, jika Anda ingin memeriksa kolom sebelum pembuatan lebih sederhana:

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)

keluaran:

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

Jika Anda hanya ingin memeriksa beberapa kolom, Anda hanya dapat melakukan:

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])))

keluaran:

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. Mysql -- 30 hari terakhir

  2. MySQL - Dapatkan penghitung untuk setiap nilai duplikat

  3. permintaan tunggal untuk mencetak semua baris yang jumlahnya lebih besar dari 10

  4. Bagaimana cara membuat alamat email untuk anggota situs web saya secara otomatis?

  5. Pengelompokan ke dalam interval 5 menit dalam rentang waktu