Вы не присоединяетесь к базам данных, вы присоединяетесь к таблицам. Чтобы использовать несколько баз данных в соединении, вы открываете / соединяете одну базу данных и присоединяете другие базы данных к схеме, чтобы различать их, исходная подключенная база данных будет иметь имя схемы main.
Если вы этого не сделаете предоставьте условия для JOIN, тогда каждая перестановка / комбинация будет результатом.
- Вы используете
ON the_condition(s)
в качестве демонстрации ATTACH и JOIN с и без условий: -
import sqlite3
# First database
connection1 = sqlite3.connect("database")
connection1.execute("CREATE TABLE IF NOT EXISTS table1 (id INTEGER PRIMARY KEY, name TEXT)")
connection1.commit()
connection1.execute("DELETE FROM table1")
connection1.execute("INSERT INTO table1 (name) VALUES('Frank'),('Mary'),('Joan')")
connection1.commit()
cursor = connection1.execute("SELECT * FROM table1")
print("\nData in table1 (in 1st Database)")
rows = cursor.fetchall()
for row in rows:
print(row)
# Second database
connection2 = sqlite3.connect("database1")
connection2.execute("CREATE TABLE IF NOT EXISTS table2 (id INTEGER PRIMARY KEY, name TEXT)")
connection2.commit()
connection2.execute("DELETE FROM table2")
connection2.execute("INSERT INTO table2 (name) VALUES('Apple'),('Banana'),('Pear')")
connection2.commit()
cursor = connection2.execute("SELECT * FROM table2")
print("\nData in table 2 (in 2nd Database)")
rows = cursor.fetchall()
for row in rows:
print(row)
connection2.close()
# Attach 2nd database to first
connection1.execute("ATTACH DATABASE 'database1' AS schema_database2")
connection1.commit()
# Use a JOIN
cursor = connection1.execute("SELECT * FROM main.table1 JOIN schema_database2.table2 ON table1.id = table2.id")
print("\nJoin Example 1 (schema not needed)")
rows = cursor.fetchall()
for row in rows:
print(row)
# If there is no ambiguity of names (table names) then just table name can be used
print("\nJoin Example 2 (schema not needed)")
cursor = connection1.execute("SELECT * FROM table1 JOIN table2 ON table1.id = table2.id")
rows = cursor.fetchall()
for row in rows:
print(row)
print("\nNatural (not recommended ) Join")
cursor = connection1.execute("SELECT * FROM table1 JOIN table2")
rows = cursor.fetchall()
for row in rows:
print(row)
Демо Результат: -
Data in table1 (in 1st Database)
(1, 'Frank')
(2, 'Mary')
(3, 'Joan')
Data in table 2 (in 2nd Database)
(1, 'Apple')
(2, 'Banana')
(3, 'Pear')
Join Example 1 (schema not needed)
(1, 'Frank', 1, 'Apple')
(2, 'Mary', 2, 'Banana')
(3, 'Joan', 3, 'Pear')
Join Example 2 (schema not needed)
(1, 'Frank', 1, 'Apple')
(2, 'Mary', 2, 'Banana')
(3, 'Joan', 3, 'Pear')
Without JOIN conditions (joins everything to everything)
(1, 'Frank', 1, 'Apple')
(1, 'Frank', 2, 'Banana')
(1, 'Frank', 3, 'Pear')
(2, 'Mary', 1, 'Apple')
(2, 'Mary', 2, 'Banana')
(2, 'Mary', 3, 'Pear')
(3, 'Joan', 1, 'Apple')
(3, 'Joan', 2, 'Banana')
(3, 'Joan', 3, 'Pear')
Process finished with exit code 0