diff --git a/dbrepo-analyse-service/lib/dbrepo-1.4.4-py3-none-any.whl b/dbrepo-analyse-service/lib/dbrepo-1.4.4-py3-none-any.whl
index e38e1ef73a34a89a38ed9fef78bae18f24696b39..4acaa2f242aa1a17081c6b649879afacfa191dad 100644
Binary files a/dbrepo-analyse-service/lib/dbrepo-1.4.4-py3-none-any.whl and b/dbrepo-analyse-service/lib/dbrepo-1.4.4-py3-none-any.whl differ
diff --git a/dbrepo-analyse-service/lib/dbrepo-1.4.4.tar.gz b/dbrepo-analyse-service/lib/dbrepo-1.4.4.tar.gz
index 13e777fc80d58a5528ae0aadb1b406895ca143e0..e0bdb5adee8536ec4455e215913a6a769237b1e9 100644
Binary files a/dbrepo-analyse-service/lib/dbrepo-1.4.4.tar.gz and b/dbrepo-analyse-service/lib/dbrepo-1.4.4.tar.gz differ
diff --git a/dbrepo-data-service/services/src/main/java/at/tuwien/mapper/MariaDbMapper.java b/dbrepo-data-service/services/src/main/java/at/tuwien/mapper/MariaDbMapper.java
index d1b033fe5bf3bb237adc09f6ab541f3260cc11b1..8820cd294aab3544d26a691486de083cef4cec21 100644
--- a/dbrepo-data-service/services/src/main/java/at/tuwien/mapper/MariaDbMapper.java
+++ b/dbrepo-data-service/services/src/main/java/at/tuwien/mapper/MariaDbMapper.java
@@ -226,9 +226,14 @@ public interface MariaDbMapper {
                     /* null expressions */
                     .append(column.getNullAllowed() != null && column.getNullAllowed() ? " NULL" : " NOT NULL")
                     /* default expressions */
-                    .append(data.getNeedSequence() && column.getName().equals("id") ? " DEFAULT NEXTVAL(`" + tableCreateDtoToSequenceName(data) + "`)" : "")
-                    /* comments */
-                    .append(!column.getDescription().isEmpty() ? (" COMMENT \"" + column.getDescription() + "\"") : "");
+                    .append(data.getNeedSequence() && column.getName().equals("id") ? " DEFAULT NEXTVAL(`" + tableCreateDtoToSequenceName(data) + "`)" : "");
+            if (column.getDescription() != null && !column.getDescription().isEmpty()) {
+                /* comments */
+                stringBuilder.append(" COMMENT \"")
+                        .append(column.getDescription())
+                        .append("\"");
+            }
+
         }
         /* create primary key index */
         stringBuilder.append(", PRIMARY KEY (")
diff --git a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/ImportCsvDto.java b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/ImportCsvDto.java
index 422b20527f8c0ddb98eefc646d19753f370c0c43..eac536143e1b59efce8617f740334acc74b77f5a 100644
--- a/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/ImportCsvDto.java
+++ b/dbrepo-metadata-service/api/src/main/java/at/tuwien/api/database/query/ImportCsvDto.java
@@ -18,7 +18,7 @@ import lombok.extern.jackson.Jacksonized;
 @ToString
 public class ImportCsvDto {
 
-    @NotBlank(message = "location is required")
+    @NotBlank
     @Schema(example = "file.csv")
     private String location;
 
diff --git a/dbrepo-search-service/lib/dbrepo-1.4.4-py3-none-any.whl b/dbrepo-search-service/lib/dbrepo-1.4.4-py3-none-any.whl
index e38e1ef73a34a89a38ed9fef78bae18f24696b39..4acaa2f242aa1a17081c6b649879afacfa191dad 100644
Binary files a/dbrepo-search-service/lib/dbrepo-1.4.4-py3-none-any.whl and b/dbrepo-search-service/lib/dbrepo-1.4.4-py3-none-any.whl differ
diff --git a/dbrepo-search-service/lib/dbrepo-1.4.4.tar.gz b/dbrepo-search-service/lib/dbrepo-1.4.4.tar.gz
index 13e777fc80d58a5528ae0aadb1b406895ca143e0..e0bdb5adee8536ec4455e215913a6a769237b1e9 100644
Binary files a/dbrepo-search-service/lib/dbrepo-1.4.4.tar.gz and b/dbrepo-search-service/lib/dbrepo-1.4.4.tar.gz differ
diff --git a/lib/python/Makefile b/lib/python/Makefile
index f8f7215b3839eba5dd547603bb1725fa08f9156b..31371ee1da71daa24e663344df62a860e674c04e 100644
--- a/lib/python/Makefile
+++ b/lib/python/Makefile
@@ -1,4 +1,4 @@
-all:
+all: build
 
 clean:
 	rm -rf ./python/dist/* ./docs/build/* ./dist/*
diff --git a/lib/python/dbrepo/RestClient.py b/lib/python/dbrepo/RestClient.py
index e864cc411deb03cb4bf1ab0be9b329d186bcfe42..453a7d4315439b60e00638273291175f38f15e63 100644
--- a/lib/python/dbrepo/RestClient.py
+++ b/lib/python/dbrepo/RestClient.py
@@ -61,14 +61,13 @@ class RestClient:
         if headers is not None:
             logging.debug(f'headers: {headers}')
         if payload is not None:
-            logging.debug(f'payload: {payload}')
-            payload = payload.model_dump_json()
+            logging.debug(f'payload: {payload.model_dump()}')
         if self.username is not None and self.password is not None:
             logging.debug(f'username: {self.username}, password: (hidden)')
             return requests.request(method=method, url=url, auth=(self.username, self.password), verify=self.secure,
-                                    json=payload, headers=headers, params=params, stream=stream)
-        return requests.request(method=method, url=url, verify=self.secure, json=payload, headers=headers,
-                                params=params, stream=stream)
+                                    json=payload.model_dump(), headers=headers, params=params, stream=stream)
+        return requests.request(method=method, url=url, verify=self.secure, json=payload.model_dump(),
+                                headers=headers, params=params, stream=stream)
 
     def upload(self, file_path: str) -> str:
         """
@@ -767,9 +766,9 @@ class RestClient:
             f'Failed to insert table data: response code: {response.status_code} is not 202 (ACCEPTED)')
 
     def import_table_data(self, database_id: int, table_id: int, separator: str, file_path: str,
-                          quote: str = None, skip_lines: int = None, false_encoding: str = None,
+                          quote: str = None, skip_lines: int = 0, false_encoding: str = None,
                           true_encoding: str = None, null_encoding: str = None,
-                          line_encoding: str = None) -> None:
+                          line_encoding: str = "\r\n") -> None:
         """
         Import a csv dataset from a file into a table in a database with given database id and table id.
 
@@ -778,10 +777,10 @@ class RestClient:
         :param separator: The csv column separator.
         :param file_path: The path of the file that is imported on the storage service.
         :param quote: The column data quotation character. Optional.
-        :param skip_lines: The number of lines to skip. Optional.
+        :param skip_lines: The number of lines to skip. Optional. Default: 0.
         :param false_encoding: The encoding of boolean false. Optional.
         :param true_encoding: The encoding of boolean true. Optional.
-        :param null_encoding: The encoding of null. Optional. Default: empty string "".
+        :param null_encoding: The encoding of null. Optional.
         :param line_encoding: The encoding of the line termination. Optional. Default: CR (Windows).
 
         :raises ResponseCodeError: If something went wrong with the insert.
diff --git a/lib/python/dbrepo/api/dto.py b/lib/python/dbrepo/api/dto.py
index 27256c63985dbf1801612cef461cb6a4541b8030..0a27cb664d7e4b5c1f4ed71dfa64328d2f52dcf8 100644
--- a/lib/python/dbrepo/api/dto.py
+++ b/lib/python/dbrepo/api/dto.py
@@ -499,7 +499,6 @@ class CreateTable(BaseModel):
 class CreateTableColumn(BaseModel):
     name: str
     type: ColumnType
-    primary_key: bool
     null_allowed: bool
     index_length: Optional[int] = None
     size: Optional[int] = None
@@ -993,8 +992,12 @@ class CreateForeignKey(BaseModel):
     on_delete: Optional[str] = None
 
 
+class PrimaryKey(BaseModel):
+    pkid: int
+
+
 class Constraints(BaseModel):
     uniques: List[Unique]
     foreign_keys: List[ForeignKey]
     checks: List[str]
-    primary_key: List[str]
+    primary_key: List[PrimaryKey]