| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- # testing/suite/test_unicode_ddl.py
- # Copyright (C) 2005-2025 the SQLAlchemy authors and contributors
- # <see AUTHORS file>
- #
- # This module is part of SQLAlchemy and is released under
- # the MIT License: https://www.opensource.org/licenses/mit-license.php
- # mypy: ignore-errors
- from sqlalchemy import desc
- from sqlalchemy import ForeignKey
- from sqlalchemy import Integer
- from sqlalchemy import MetaData
- from sqlalchemy import testing
- from sqlalchemy.testing import eq_
- from sqlalchemy.testing import fixtures
- from sqlalchemy.testing.schema import Column
- from sqlalchemy.testing.schema import Table
- class UnicodeSchemaTest(fixtures.TablesTest):
- __requires__ = ("unicode_ddl",)
- __backend__ = True
- @classmethod
- def define_tables(cls, metadata):
- global t1, t2, t3
- t1 = Table(
- "unitable1",
- metadata,
- Column("méil", Integer, primary_key=True),
- Column("\u6e2c\u8a66", Integer),
- test_needs_fk=True,
- )
- t2 = Table(
- "Unitéble2",
- metadata,
- Column("méil", Integer, primary_key=True, key="a"),
- Column(
- "\u6e2c\u8a66",
- Integer,
- ForeignKey("unitable1.méil"),
- key="b",
- ),
- test_needs_fk=True,
- )
- # Few DBs support Unicode foreign keys
- if testing.against("sqlite"):
- t3 = Table(
- "\u6e2c\u8a66",
- metadata,
- Column(
- "\u6e2c\u8a66_id",
- Integer,
- primary_key=True,
- autoincrement=False,
- ),
- Column(
- "unitable1_\u6e2c\u8a66",
- Integer,
- ForeignKey("unitable1.\u6e2c\u8a66"),
- ),
- Column("Unitéble2_b", Integer, ForeignKey("Unitéble2.b")),
- Column(
- "\u6e2c\u8a66_self",
- Integer,
- ForeignKey("\u6e2c\u8a66.\u6e2c\u8a66_id"),
- ),
- test_needs_fk=True,
- )
- else:
- t3 = Table(
- "\u6e2c\u8a66",
- metadata,
- Column(
- "\u6e2c\u8a66_id",
- Integer,
- primary_key=True,
- autoincrement=False,
- ),
- Column("unitable1_\u6e2c\u8a66", Integer),
- Column("Unitéble2_b", Integer),
- Column("\u6e2c\u8a66_self", Integer),
- test_needs_fk=True,
- )
- def test_insert(self, connection):
- connection.execute(t1.insert(), {"méil": 1, "\u6e2c\u8a66": 5})
- connection.execute(t2.insert(), {"a": 1, "b": 1})
- connection.execute(
- t3.insert(),
- {
- "\u6e2c\u8a66_id": 1,
- "unitable1_\u6e2c\u8a66": 5,
- "Unitéble2_b": 1,
- "\u6e2c\u8a66_self": 1,
- },
- )
- eq_(connection.execute(t1.select()).fetchall(), [(1, 5)])
- eq_(connection.execute(t2.select()).fetchall(), [(1, 1)])
- eq_(connection.execute(t3.select()).fetchall(), [(1, 5, 1, 1)])
- def test_col_targeting(self, connection):
- connection.execute(t1.insert(), {"méil": 1, "\u6e2c\u8a66": 5})
- connection.execute(t2.insert(), {"a": 1, "b": 1})
- connection.execute(
- t3.insert(),
- {
- "\u6e2c\u8a66_id": 1,
- "unitable1_\u6e2c\u8a66": 5,
- "Unitéble2_b": 1,
- "\u6e2c\u8a66_self": 1,
- },
- )
- row = connection.execute(t1.select()).first()
- eq_(row._mapping[t1.c["méil"]], 1)
- eq_(row._mapping[t1.c["\u6e2c\u8a66"]], 5)
- row = connection.execute(t2.select()).first()
- eq_(row._mapping[t2.c["a"]], 1)
- eq_(row._mapping[t2.c["b"]], 1)
- row = connection.execute(t3.select()).first()
- eq_(row._mapping[t3.c["\u6e2c\u8a66_id"]], 1)
- eq_(row._mapping[t3.c["unitable1_\u6e2c\u8a66"]], 5)
- eq_(row._mapping[t3.c["Unitéble2_b"]], 1)
- eq_(row._mapping[t3.c["\u6e2c\u8a66_self"]], 1)
- def test_reflect(self, connection):
- connection.execute(t1.insert(), {"méil": 2, "\u6e2c\u8a66": 7})
- connection.execute(t2.insert(), {"a": 2, "b": 2})
- connection.execute(
- t3.insert(),
- {
- "\u6e2c\u8a66_id": 2,
- "unitable1_\u6e2c\u8a66": 7,
- "Unitéble2_b": 2,
- "\u6e2c\u8a66_self": 2,
- },
- )
- meta = MetaData()
- tt1 = Table(t1.name, meta, autoload_with=connection)
- tt2 = Table(t2.name, meta, autoload_with=connection)
- tt3 = Table(t3.name, meta, autoload_with=connection)
- connection.execute(tt1.insert(), {"méil": 1, "\u6e2c\u8a66": 5})
- connection.execute(tt2.insert(), {"méil": 1, "\u6e2c\u8a66": 1})
- connection.execute(
- tt3.insert(),
- {
- "\u6e2c\u8a66_id": 1,
- "unitable1_\u6e2c\u8a66": 5,
- "Unitéble2_b": 1,
- "\u6e2c\u8a66_self": 1,
- },
- )
- eq_(
- connection.execute(tt1.select().order_by(desc("méil"))).fetchall(),
- [(2, 7), (1, 5)],
- )
- eq_(
- connection.execute(tt2.select().order_by(desc("méil"))).fetchall(),
- [(2, 2), (1, 1)],
- )
- eq_(
- connection.execute(
- tt3.select().order_by(desc("\u6e2c\u8a66_id"))
- ).fetchall(),
- [(2, 7, 2, 2), (1, 5, 1, 1)],
- )
- def test_repr(self):
- meta = MetaData()
- t = Table("\u6e2c\u8a66", meta, Column("\u6e2c\u8a66_id", Integer))
- eq_(
- repr(t),
- (
- "Table('測試', MetaData(), "
- "Column('測試_id', Integer(), "
- "table=<測試>), "
- "schema=None)"
- ),
- )
|