return self._default_schema_name
def has_table(self, connection, table_name, schema=None):
+ # SHOW TABLE STATUS LIKE and SHOW TABLES LIKE do not function properly
+ # on macosx (and maybe win?) with multibyte table names.
+ #
+ # TODO: if this is not a problem on win, make the strategy swappable
+ # based on platform. DESCRIBE is much slower.
if schema is not None:
- st = 'SHOW TABLE STATUS FROM `%s` LIKE %%s' % schema
+ st = "DESCRIBE `%s`.`%s`" % (schema, table_name)
else:
- st = 'SHOW TABLE STATUS LIKE %s'
- return connection.execute(st, table_name).rowcount != 0
+ st = "DESCRIBE `%s`" % table_name
+ try:
+ return connection.execute(st).rowcount > 0
+ except exceptions.SQLError, e:
+ if e.orig.args[0] == 1146:
+ return False
+ raise
def get_version_info(self, connectable):
if hasattr(connectable, 'connect'):
def _escape_table_name(self, table):
if table.schema is not None:
- return '`%s`.`%s`' % (table.schema. table.name)
+ return '`%s`.`%s`' % (table.schema, table.name)
else:
return '`%s`' % table.name
print buf
assert buf.index("CREATE TABLE someschema.table1") > -1
assert buf.index("CREATE TABLE someschema.table2") > -1
+
+ @testbase.unsupported('sqlite')
+ def testcreate(self):
+ schema = testbase.db.url.database
+ metadata = MetaData(testbase.db)
+ table1 = Table('table1', metadata,
+ Column('col1', Integer, primary_key=True),
+ schema=schema)
+ table2 = Table('table2', metadata,
+ Column('col1', Integer, primary_key=True),
+ Column('col2', Integer, ForeignKey('%s.table1.col1' % schema)),
+ schema=schema)
+ metadata.create_all()
+ metadata.create_all(checkfirst=True)
+ metadata.clear()
+ table1 = Table('table1', metadata, autoload=True, schema=schema)
+ table2 = Table('table2', metadata, autoload=True, schema=schema)
+ metadata.drop_all()
if __name__ == "__main__":