| 1081 | return column_names, data_list |
| 1082 | |
| 1083 | def insert( |
| 1084 | self, |
| 1085 | chunksize: int | None = None, |
| 1086 | method: Literal["multi"] | Callable | None = None, |
| 1087 | ) -> int | None: |
| 1088 | # set insert method |
| 1089 | if method is None: |
| 1090 | exec_insert = self._execute_insert |
| 1091 | elif method == "multi": |
| 1092 | exec_insert = self._execute_insert_multi |
| 1093 | elif callable(method): |
| 1094 | exec_insert = partial(method, self) |
| 1095 | else: |
| 1096 | raise ValueError(f"Invalid parameter `method`: {method}") |
| 1097 | |
| 1098 | keys, data_list = self.insert_data() |
| 1099 | |
| 1100 | nrows = len(self.frame) |
| 1101 | |
| 1102 | if nrows == 0: |
| 1103 | return 0 |
| 1104 | |
| 1105 | if chunksize is None: |
| 1106 | chunksize = nrows |
| 1107 | elif chunksize == 0: |
| 1108 | raise ValueError("chunksize argument should be non-zero") |
| 1109 | |
| 1110 | chunks = (nrows // chunksize) + 1 |
| 1111 | total_inserted = None |
| 1112 | with self.pd_sql.run_transaction() as conn: |
| 1113 | for i in range(chunks): |
| 1114 | start_i = i * chunksize |
| 1115 | end_i = min((i + 1) * chunksize, nrows) |
| 1116 | if start_i >= end_i: |
| 1117 | break |
| 1118 | |
| 1119 | chunk_iter = zip( |
| 1120 | *(arr[start_i:end_i] for arr in data_list), strict=True |
| 1121 | ) |
| 1122 | num_inserted = exec_insert(conn, keys, chunk_iter) |
| 1123 | # GH 46891 |
| 1124 | if num_inserted is not None: |
| 1125 | if total_inserted is None: |
| 1126 | total_inserted = num_inserted |
| 1127 | else: |
| 1128 | total_inserted += num_inserted |
| 1129 | return total_inserted |
| 1130 | |
| 1131 | def _query_iterator( |
| 1132 | self, |