title: Joins 01 tags: python db postgres mysql * See [w3schools](https://www.w3schools.com/postgresql/postgresql_inner_join.php) ## Inner Join Example ```py cur.execute("select * from mp4_raw_json inner join mp4_info on mp4_info.path = mp4_raw_json.path") ``` ## Worked Example Copying data from a postgresql database to a local mysql database. ```py import sys import mysql.connector from mysql.connector.errors import DatabaseError import json from jda_psql import Psql1 try: mydb = mysql.connector.connect(host="localhost",user="me",password="turnip",database="mydb") except DatabaseError as e: print(f"DatabaseError(connect): {e}",file=sys.stderr) exit(1) class Get(Psql1): def go(self): cur = self.cur cur.execute("select * from mp4_raw_json inner join mp4_info on mp4_info.path = mp4_raw_json.path") headings = [desc[0] for desc in cur.description] data = [] print("fetching psql") for row in cur.fetchall(): d = {} for k,v in zip(headings,row): if k == "id": continue d[k] = v data.append(d) for item in data: path = item["path"] cat = path.split("/")[0] item["cat"] = cat cur = mydb.cursor() print("inserting mysql") for item in data: cur.execute("""INSERT INTO mp4_info ( path, cat, filename, fps, duration, duration_hms, width, height, size_bytes, data ) VALUES ( %s, %s, %s, %s, %s, %s, %s, %s, %s, %s )""",( item["path"], item["cat"], item["filename"], item["fps"], item["duration"], item["duration_hms"], item["width"], item["height"], item["size_bytes"], json.dumps(item["data"]) ) ) print("Added",item["path"]) def ensure_table(self): cur = mydb.cursor() cur.execute("DROP TABLE IF EXISTS mp4_info") cur.execute("""CREATE TABLE mp4_info ( id INTEGER AUTO_INCREMENT PRIMARY KEY, path TEXT, cat TEXT, filename TEXT, fps TEXT, duration REAL, duration_hms TEXT, width INTEGER, height INTEGER, size_bytes BIGINT, data JSON ) """) print("Ensure table done") app = Get(host="dbhost",dbname="myflix") app.ensure_table() app.main() mydb.commit() ```