I am creating a FastAPI python app with SQLAlchemy, and am currently running into an error, this is the log:

```
Initializing Post Table...
2023-11-16 00:05:04,136 INFO sqlalchemy.engine.Engine BEGIN (implicit)
2023-11-16 00:05:04,137 INFO sqlalchemy.engine.Engine PRAGMA main.table_info("posts")
2023-11-16 00:05:04,137 INFO sqlalchemy.engine.Engine [raw sql] ()
2023-11-16 00:05:04,143 INFO sqlalchemy.engine.Engine PRAGMA temp.table_info("posts")
2023-11-16 00:05:04,144 INFO sqlalchemy.engine.Engine [raw sql] ()
2023-11-16 00:05:04,147 INFO sqlalchemy.engine.Engine
CREATE TABLE posts (
        id INTEGER NOT NULL,
        created_at VARCHAR,
        score VARCHAR,
        width VARCHAR,
        height VARCHAR,
        md5 VARCHAR,
        directory VARCHAR,
        image VARCHAR,
        rating VARCHAR,
        source VARCHAR,
        change VARCHAR,
        owner VARCHAR,
        creator_id VARCHAR,
        parent_id VARCHAR,
        sample VARCHAR,
        preview_height VARCHAR,
        preview_width VARCHAR,
        tags VARCHAR,
        title VARCHAR,
        has_notes VARCHAR,
        has_comments VARCHAR,
        file_url VARCHAR,
        preview_url VARCHAR,
        sample_url VARCHAR,
        sample_height VARCHAR,
        sample_width VARCHAR,
        status VARCHAR,
        post_locked VARCHAR,
        has_children VARCHAR,
        PRIMARY KEY (id)
)


2023-11-16 00:05:04,155 INFO sqlalchemy.engine.Engine [no key 0.00596s] ()
2023-11-16 00:05:04,157 INFO sqlalchemy.engine.Engine COMMIT
Processing https://gelbooru.com/index.php?page=dapi&s=post&q=index&tags=sitting_on_lap+1girl+1boy+sort%3Ascore%3Adesc&limit=100&pid=0&api_key=4cf7aa887a2e8769fc6334dae13005dd8f372484dbc17034a8f5b5b205c5eeba&user_id=251900
Found 100 posts.
2023-11-16 00:05:05,740 INFO sqlalchemy.engine.Engine BEGIN (implicit)
2023-11-16 00:05:05,741 INFO sqlalchemy.engine.Engine INSERT INTO posts (?) VALUES (?)
2023-11-16 00:05:05,742 INFO sqlalchemy.engine.Engine [generated in 0.00042s] ('id, 
created_at, score, width, height, md5, directory, image, rating, source, change, owner, creator_id, parent_id, sample, preview_height, preview_width, tags, title, has_notes, has_comments, file_url, preview_url, sample_url, sample_height, sample_width, 
status, post_locked, has_children', '4904868, Fri Sep 06 22:07:38 -0500 2019, 2120, 
1280, 720, 71d6e21427e10a0f2892c86e88d98db8, 71/d6, 71d6e21427e10a0f2892c86e88d98db8.webm, explicit, S ... (903 characters truncated) ... 27e10a0f2892c86e88d98db8.mp4, 
https://img3.gelbooru.com/thumbnails/71/d6/thumbnail_71d6e21427e10a0f2892c86e88d98db8.jpg, None, 0, 0, active, 0, false')
2023-11-16 00:05:05,744 INFO sqlalchemy.engine.Engine ROLLBACK
INFO:     127.0.0.1:14684 - "GET /gelbooru/scrape/?tags=sitting_on_lap%201girl%201boy&page=0 HTTP/1.1" 500 Internal Server Error
ERROR:    Exception in ASGI application
Traceback (most recent call last):
  File "D:\AI Generation\Projects\ai-webui\aidili-fastreact\backend\venv\lib\site-packages\sqlalchemy\engine\base.py", line 1969, in _exec_single_context
    self.dialect.do_execute(
  File "D:\AI Generation\Projects\ai-webui\aidili-fastreact\backend\venv\lib\site-packages\sqlalchemy\engine\default.py", line 922, in do_execute
    cursor.execute(statement, parameters)
sqlite3.OperationalError: near "?": syntax error

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "D:\AI Generation\Projects\ai-webui\aidili-fastreact\backend\venv\lib\site-packages\uvicorn\protocols\http\httptools_impl.py", line 426, in run_asgi
    result = await app(  # type: ignore[func-returns-value]
  File "D:\AI Generation\Projects\ai-webui\aidili-fastreact\backend\venv\lib\site-packages\uvicorn\middleware\proxy_headers.py", line 84, in __call__
    return await self.app(scope, receive, send)
  File "D:\AI Generation\Projects\ai-webui\aidili-fastreact\backend\venv\lib\site-packages\fastapi\applications.py", line 1106, in __call__
    await super().__call__(scope, receive, send)
  File "D:\AI Generation\Projects\ai-webui\aidili-fastreact\backend\venv\lib\site-packages\starlette\applications.py", line 122, in __call__
    await self.middleware_stack(scope, receive, send)
  File "D:\AI Generation\Projects\ai-webui\aidili-fastreact\backend\venv\lib\site-packages\starlette\middleware\errors.py", line 184, in __call__
    raise exc
  File "D:\AI Generation\Projects\ai-webui\aidili-fastreact\backend\venv\lib\site-packages\starlette\middleware\errors.py", line 162, in __call__
    await self.app(scope, receive, _send)
  File "D:\AI Generation\Projects\ai-webui\aidili-fastreact\backend\venv\lib\site-packages\starlette\middleware\exceptions.py", line 79, in __call__
    raise exc
  File "D:\AI Generation\Projects\ai-webui\aidili-fastreact\backend\venv\lib\site-packages\starlette\middleware\exceptions.py", line 68, in __call__
    await self.app(scope, receive, sender)
  File "D:\AI Generation\Projects\ai-webui\aidili-fastreact\backend\venv\lib\site-packages\fastapi\middleware\asyncexitstack.py", line 20, in __call__
    raise e
  File "D:\AI Generation\Projects\ai-webui\aidili-fastreact\backend\venv\lib\site-packages\fastapi\middleware\asyncexitstack.py", line 17, in __call__
    await self.app(scope, receive, send)
  File "D:\AI Generation\Projects\ai-webui\aidili-fastreact\backend\venv\lib\site-packages\starlette\routing.py", line 718, in __call__
    await route.handle(scope, receive, send)
  File "D:\AI Generation\Projects\ai-webui\aidili-fastreact\backend\venv\lib\site-packages\starlette\routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "D:\AI Generation\Projects\ai-webui\aidili-fastreact\backend\venv\lib\site-packages\starlette\routing.py", line 66, in app
    response = await func(request)
  File "D:\AI Generation\Projects\ai-webui\aidili-fastreact\backend\venv\lib\site-packages\fastapi\routing.py", line 274, in app
    raw_response = await run_endpoint_function(
  File "D:\AI Generation\Projects\ai-webui\aidili-fastreact\backend\venv\lib\site-packages\fastapi\routing.py", line 191, in run_endpoint_function
    return await dependant.call(**values)
  File "D:\AI Generation\Projects\ai-webui\aidili-fastreact\backend\main.py", line 61, in gelbooru
    result = session.execute(
  File "D:\AI Generation\Projects\ai-webui\aidili-fastreact\backend\venv\lib\site-packages\sqlalchemy\orm\session.py", line 2308, in execute
    return self._execute_internal(
  File "D:\AI Generation\Projects\ai-webui\aidili-fastreact\backend\venv\lib\site-packages\sqlalchemy\orm\session.py", line 2199, in _execute_internal
    result = conn.execute(
  File "D:\AI Generation\Projects\ai-webui\aidili-fastreact\backend\venv\lib\site-packages\sqlalchemy\engine\base.py", line 1416, in execute
    return meth(
  File "D:\AI Generation\Projects\ai-webui\aidili-fastreact\backend\venv\lib\site-packages\sqlalchemy\sql\elements.py", line 516, in _execute_on_connection
    return connection._execute_clauseelement(
  File "D:\AI Generation\Projects\ai-webui\aidili-fastreact\backend\venv\lib\site-packages\sqlalchemy\engine\base.py", line 1639, in _execute_clauseelement
    ret = self._execute_context(
  File "D:\AI Generation\Projects\ai-webui\aidili-fastreact\backend\venv\lib\site-packages\sqlalchemy\engine\base.py", line 1848, in _execute_context
    return self._exec_single_context(
  File "D:\AI Generation\Projects\ai-webui\aidili-fastreact\backend\venv\lib\site-packages\sqlalchemy\engine\base.py", line 1988, in _exec_single_context
    self._handle_dbapi_exception(
  File "D:\AI Generation\Projects\ai-webui\aidili-fastreact\backend\venv\lib\site-packages\sqlalchemy\engine\base.py", line 2343, in _handle_dbapi_exception
    raise sqlalchemy_exception.with_traceback(exc_info[2]) from e
  File "D:\AI Generation\Projects\ai-webui\aidili-fastreact\backend\venv\lib\site-packages\sqlalchemy\engine\base.py", line 1969, in _exec_single_context
    self.dialect.do_execute(
  File "D:\AI Generation\Projects\ai-webui\aidili-fastreact\backend\venv\lib\site-packages\sqlalchemy\engine\default.py", line 922, in do_execute
    cursor.execute(statement, parameters)
sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) near "?": syntax error  
[SQL: INSERT INTO posts (?) VALUES (?)]
[parameters: ('id, created_at, score, width, height, md5, directory, image, rating, 
source, change, owner, creator_id, parent_id, sample, preview_height, preview_width, tags, title, has_notes, has_comments, file_url, preview_url, sample_url, sample_height, sample_width, status, post_locked, has_children', '4904868, Fri Sep 06 22:07:38 -0500 2019, 2120, 1280, 720, 71d6e21427e10a0f2892c86e88d98db8, 71/d6, 71d6e21427e10a0f2892c86e88d98db8.webm, explicit, S ... (903 characters truncated) ... 27e10a0f2892c86e88d98db8.mp4, https://img3.gelbooru.com/thumbnails/71/d6/thumbnail_71d6e21427e10a0f2892c86e88d98db8.jpg, None, 0, 0, active, 0, false')]
(Background on this error at: https://sqlalche.me/e/20/e3q8)
```

Specifically the code surrounding the error in my main.py file:
```python
is_table_initialized = False

from sqlalchemy import MetaData, text
from sqlalchemy.orm import Session
from database import engine
metadata_obj = MetaData()

from sqlalchemy import Table, Column, Integer, String
post_table = Table(
    "posts",
    metadata_obj,
    Column("id", Integer, primary_key=True, autoincrement=False),
)

# We get 1 post as a dummy to fill up the table
def initialize_table():
    global is_table_initialized

    if is_table_initialized:
        return
    
    posts = scrape_gelbooru(f"", limit=1, max_posts=1)
    print(f"Initializing Post Table...")
    for k in posts[0].keys():
        if k == 'id':
            continue

        post_table.append_column(Column(k, String)) # Could probably do some checking here for types

    metadata_obj.create_all(engine)
    
    is_table_initialized = True

# Now let's manipulate the DB
insert_stmt = text("INSERT INTO posts (:keys) VALUES (:values)")
select_stmt = text("SELECT * FROM posts")

@app.get("/gelbooru/scrape/")
async def gelbooru(tags: str = "sitting_on_lap 1girl 1boy", page: int = 0):
    initialize_table()

    posts = scrape_gelbooru(
        f"{tags} sort:score:desc", start_page=page, limit=100, max_pages=1
    )

    with Session(engine) as session:
        for post in posts:
            result = session.execute(
                insert_stmt,
                {
                    "keys": ", ".join([str(f"{k}") for k in post.keys()]),
                    "values": ", ".join([str(f"{v}") for v in post.values()]),
                }
            )
        
        session.commit()

    return posts
```
the `scrape_gelbooru()` function is a custom method that basically scrapes data from a website, and returns a list[dict[str, str]] of the posts.
I just want to know specifically about the error, let's take a deep breath and think about it step-by-step to find and fix the syntax error.