@@ -306,13 +306,13 @@ def compile(self, c: Compiler) -> str:
306306        return  "." .join (map (c .quote , path ))
307307
308308    # Statement shorthands 
309+     def  create (self , source_table : ITable  =  None , * , if_not_exists = False , primary_keys = None ):
309310
310-     def  create (self , source_table : ITable  =  None , * , if_not_exists = False ):
311311        if  source_table  is  None  and  not  self .schema :
312312            raise  ValueError ("Either schema or source table needed to create table" )
313313        if  isinstance (source_table , TablePath ):
314314            source_table  =  source_table .select ()
315-         return  CreateTable (self , source_table , if_not_exists = if_not_exists )
315+         return  CreateTable (self , source_table , if_not_exists = if_not_exists ,  primary_keys = primary_keys )
316316
317317    def  drop (self , if_exists = False ):
318318        return  DropTable (self , if_exists = if_exists )
@@ -641,14 +641,20 @@ class CreateTable(Statement):
641641    path : TablePath 
642642    source_table : Expr  =  None 
643643    if_not_exists : bool  =  False 
644+     primary_keys : List [str ] =  None 
644645
645646    def  compile (self , c : Compiler ) ->  str :
646647        ne  =  "IF NOT EXISTS "  if  self .if_not_exists  else  "" 
647648        if  self .source_table :
648649            return  f"CREATE TABLE { ne } { c .compile (self .path )}   AS { c .compile (self .source_table )}  " 
649650
650-         schema  =  ", " .join (f"{ c .quote (k )}   { c .database .type_repr (v )}  "  for  k , v  in  self .path .schema .items ())
651-         return  f"CREATE TABLE { ne } { c .compile (self .path )}  ({ schema }  )" 
651+         schema  =  ", " .join (f"{ c .database .quote (k )}   { c .database .type_repr (v )}  "  for  k , v  in  self .path .schema .items ())
652+         pks  =  (
653+             ", PRIMARY KEY (%s)"  %  ", " .join (self .primary_keys )
654+             if  self .primary_keys  and  c .database .SUPPORTS_PRIMARY_KEY 
655+             else  "" 
656+         )
657+         return  f"CREATE TABLE { ne } { c .compile (self .path )}  ({ schema } { pks }  )" 
652658
653659
654660@dataclass  
0 commit comments